2015-09-18 87 views
0

假設你有一個MongoDB的集合稱爲註釋包含這樣的文件,證件:查詢的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不同,所以文檔不具備資格。

我相信這不能用$ all和$ elemMatch選項完成,但它需要使用Aggregate管道來完成。我只是無法弄清楚如何。

+0

在它最簡單的形式,這可能是與'$ nin'實現我想:'db.collection.find({ 「comment.status」:{$寧: 「垃圾郵件」,「PendingReview 「]}})' –

+0

哇...那麼簡單!非常感謝你,它實際上是有效的。如果你有點麻煩,請創建一個答案,我會接受它。 – agarcian

回答

1

最簡單的形式是$nin

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

相關問題