假设您有一个名为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 回答
在它最简单的形式,这可以通过$nin来实现 .
db.collection.find({"comment.status" : {$nin : ["Spam" , "PendingReview"]}})