gpt4 book ai didi

arrays - 如何在mongo shell查询中仅投影嵌套数组的匹配字段

转载 作者:IT老高 更新时间:2023-10-28 13:22:08 33 4
gpt4 key购买 nike

我对 mongodb 还很陌生,我有一个很简单的问题:

我有一个嵌套模式,其中我有一个字段是一个数组,其中该数组的每个项目都是一个对象,它本身具有一个数组字段。

例如:

> db.mytest.insert({
name: 'a',
top: [
{x:1, y:2, nest: [{p:1, q:2}, {p:2, q:3}]},
{x:2, y:3, nest: [{p:4, q:5}, {p:6, q:7}]}
]
})

我可以很好地查询 p 的某些值,甚至可以将我的结果限制为 top 的第一个匹配元素:

> db.mytest.findOne({'top.nest': {$elemMatch: {p:6}}}, {'top.nest.$': 1})
{"_id":ObjectId(...), top: [{x:2, y: 3, nest: [{p:4, q:5}, {p:6, q:7}]}]}

这让我想到了我的问题:{'top.nest.$': 1}{'top.$': 1} 作为我的投影文档返回相同的结果。如何将我的搜索结果限制为仅包含 nest 的第一个匹配元素?

我是否需要第二次遍历这种查询方式的结果?

最佳答案

好的,诀窍是 aggregation framework, specifically unwind .

> db.mytest.aggregate({$unwind: '$top'},
{$unwind: '$top.nest'},
{$match: {'top.nest.p': 6}}
)

虽然在单个对象中有多个子匹配项的情况下,这将返回多个结果而不是原始分组形式。不过,我想我可以将 $group 放入管道中。

虽然我发现的相关链接建议将架构重新设计作为目前唯一完整的修复,所以这绝对比没有好。

关于arrays - 如何在mongo shell查询中仅投影嵌套数组的匹配字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461690/

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