2015-09-18 46 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"]}})

相关问题