簡體   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