从MongoDB集合的文档中获取满足条件的元素?

时间:2018-03-03 14:19:17

标签: mongodb

如果我在这样的集合中有一些文档:

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中更新^ _ ^。

1 个答案:

答案 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]}
      ]
    }
  }
})