如果我在这样的集合中有一些文档:
db.test.find()
[{
author_id: 1
reviews: [{article_id: 1, score: 10, ...},
{article_id: 2, score: 7, ...},
{article_id: 3, score_9, ...}
...
]
},
{
author_id: 2
reviews: [{article_id: 2, score: 8, ...},
{article_id:4, score: 3, ...}
...
]
},
...
]
如何获得包含符合条件的所有评论的列表,例如。 article_id等于2 ,就像:
[{article_id: 2, author_id: 1, score: 7},
{article_id: 2, author_id: 2, score: 8}
...
]
我在MongoDB中更新^ _ ^。
答案 0 :(得分:0)
您可以在mongo 3.6版中使用以下聚合。
$filter
与$arrayElemAt
输出匹配的审核,然后$mergeObjects
将匹配的审核文档与author_id合并。
$replaceRoot
将合并文档提升到最高级别。
db.col.aggregate({
"$replaceRoot":{
"newRoot":{
"$mergeObjects":[
{"author_id":"$author_id"},
{"$arrayElemAt":[
{"$filter":{
"input":"$reviews",
"as":"rv",
"cond":{"$eq":["$$rv.article_id",2]}
}},
0]}
]
}
}
})