首页 文章

使用包含(子)文档数组的文档查询MongoDB集合,其中数组中的所有文档都与条件匹配

提问于
浏览
0

假设您有一个名为comments的mongoDB集合,其中包含以下文档:

{
    "_id" : ObjectId("55fc4e8f2b21ff102bb20d94"),
    "userName" : "user0053",
    "comment" : [ 
        {
            "timestamp" : ISODate("2015-09-18T17:49:03.678Z"),
            "title" : "Some title XYZ",
            "status" : "Approved",
            "content" : "blah blah blah"
        }, 
        {
            "timestamp" : ISODate("2015-09-18T17:49:03.678Z"),
            "title" : "Some nice looking title",
            "status" : "Approved",
            "content" : "blah blah blah"
        }, 
        {
            "timestamp" : ISODate("2015-09-18T17:49:03.678Z"),
            "title" : "A title",
            "status" : "Spam",
            "content" : "blah blah blah"
        }
    ]
}

comment 元素是一个文档数组,每个文档包含几个元素,其中包含3个(或任何)可能值的状态,例如Approved,Spam,PendingReview .

我想查询集合中的所有文档,其中comment元素包含一个数组,其中所有文档的状态均为“已批准” .

在上面的示例中,文档不符合条件,因为至少有一个注释元素的状态与Approved不同 .

我相信使用$ all和$ elemMatch选项无法做到这一点,但需要使用Aggregate管道 . 我只是无法弄清楚如何 .

1 回答

  • 1

    在它最简单的形式,这可以通过$nin来实现 .

    db.collection.find({"comment.status" : {$nin : ["Spam" , "PendingReview"]}})

相关问题