【发布时间】:2015-07-24 06:42:13
【问题描述】:
在 mongodb 中,我有一个包含单个文档的集合,如下所示:
{
"_id" : ObjectId("5552b7fd9e8c7572e36e39df"),
"StackSummaries" : [
{
"StackId" : "arn:aws:cloudformation:ap-southeast-2:406119630047:stack/XXXX-30fb22a-285-439ee279-c7c8d36/4ebd8770-f8f4-11e4-bf36-503f2370240f",
"TemplateDescription" : "XXXX",
"StackStatusReason" : "",
"CreationTime" : "2015-05-12T22:14:50.535Z",
"StackName" : "XXXX",
"StackStatus" : "CREATE_COMPLETE"
},
{
"TemplateDescription" : "XXXX",
"StackStatusReason" : "",
"CreationTime" : "2015-05-11T04:02:05.543Z",
"StackName" : "XXXX",
"StackStatus" : "DELETE_COMPLETE",
"StackId" : "arn:aws:cloudformation:ap-southeast-2:406119630047:stack/XXXXX/7c8d04e0-f792-11e4-bb12-506726f15f9a"
},
{ ... },
{ many others }
]
}
即aws cli命令的导入结果aws cloudformation
list-stacks
我正在尝试查找具有StackStatus 或CREATE_COMPLETE 或UPDATE_COMPLETE 的StackSummaries 数组的项目。经过大量试验和阅读其他 SO 帖子后,我得出以下结论:
db.cf_list_stacks.aggregate( {$match: {"StackSummaries.StackStatus": "CREATE_COMPLETE"}})
但是这仍然会返回整个文档(我什至不担心 UPDATE_COMPLETE)。
我来自 SQL 背景,正在努力处理这样的简单查询。关于如何获取我正在寻找的信息的任何想法?
我看过的帖子:
- MongoDB query with elemMatch for nested array data
- MongoDB: multiple $elemMatch
- $projection vs $elemMatch
- Make $elemMatch (projection) return all objects that match criteria
更新
关于我在理解这个主题时学到的东西的注释:
- aggregate() 只是一个 管道(就像 Unix shell 管道),其中每个 $ 运算符只是另一个步骤。就像 shell 管道一样,它们看起来很复杂,但您只需逐步构建它们,直到获得您想要的结果
- Mongo 有一个很棒的网络研讨会:Exploring the Aggregation Framework
- RoboMongo 是处理 Mongo 数据和查询的好工具 (GPL3)
【问题讨论】:
-
你只有哪些子文件符合给定的条件?您的情况的预期输出是什么?
-
嗨@Michael,集合中只有一个文档,所以我想“转换”文档,以便 StackSummaries 数组只包含 StackStatus 为 CREATE_COMPLETE 或 UPDATE_COMPLETE 的元素。可能其他答案会对我有所帮助,我刚刚醒来还没有完全理解它们。
标签: mongodb