繁体   English   中英

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

[英]Querying a MongoDB collection with documents containing an array of (sub)documents where ALL documents in the array match a condition

假设您有一个名为comment的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个(或任何一个)可能的值,例如ApprovedSpamPendingReview

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

在上面的示例中,该文档不合格,因为至少有一个注释元素的状态不同于“已批准”。

我相信这不能通过$ all和$ elemMatch选项来完成,但是需要通过Aggregate管道来完成。 我只是无法弄清楚如何。

以最简单的形式,可以使用$ nin实现。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM