gpt4 book ai didi

mongodb - 如何在 mongodb 查询中过滤数组

转载 作者:行者123 更新时间:2023-12-01 22:29:32 24 4
gpt4 key购买 nike

在 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
列表堆栈

我正在尝试查找 StackSummaries 数组中具有 CREATE_COMPLETEUPDATE_COMPLETEStackStatus 的项目>。经过多次试验和阅读其他 SO 帖子后,我得出以下结论:

db.cf_list_stacks.aggregate( {$match: {"StackSummaries.StackStatus": "CREATE_COMPLETE"}})

然而,这仍然会返回整个文档(我什至不担心 UPDATE_COMPLETE)。

我有 SQL 背景,并且正在努力处理像这样的简单查询。关于如何获取我正在寻找的信息的任何想法?

我看过的 SO 帖子:

更新

关于我在理解这个主题时学到的东西的注释:

  • aggregate() 只是一个管道(类似于 Unix shell 管道),其中每个 $ 运算符只是另一个步骤。就像 shell 管道一样,它们看起来可能很复杂,但您只需逐步构建它们,直到获得您想要的结果
  • Mongo 有一个很棒的网络研讨会:Exploring the Aggregation Framework
  • RoboMongo是处理 Mongo 数据和查询的好工具 (GPL3)

最佳答案

如果你只想要 StackSummaries 数组中的对象,你应该使用 $unwind 子句来扩展数组,过滤你想要的文档,然后只投影文档中你实际需要的部分想要。

查询看起来像这样:

db.cf_list_stacks.aggregate([
{ '$unwind' : '$StackSummaries' },
{ '$match' : { 'StackSummaries.StackStatus' : 'CREATE_COMPLETE' } },
{ '$project' : {
'TemplateDescription' : '$StackSummaries.TemplateDescription',
'StackStatusReason' : '$StackSummaries.StackStatusReason',
...
} }
])

有用的链接:

关于mongodb - 如何在 mongodb 查询中过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com