我在MongoDB中拥有以下文档:
{
name: "document1",
data: [{
name: "xxxxx",
status: "delivered"
},{
name: "xxxxx",
status: "In Process"
},{
name: "xxxxx",
status: "Not Started"
}]
},{
name: "document2",
data: [{
name: "xxxxx",
status: "delivered"
},{
name: "xxxxx",
status: "delivered"
},{
name: "xxxxx",
status: "delivered"
}]
}
我要查找所有文档,其中“数据”数组内的所有对象的状态均为“已交付”,我曾经使用$ne: 'Not Started'
,但是现在引入了更多的状态选项,因此不起作用。也许我可以做一个$ne: $and
并包含所有否定选项,但是任何新状态都会带来问题。
答案 0 :(得分:2)
您可以将$not
与$elemMatch
一起使用
db.collection.find({
"data": {
"$not": {
"$elemMatch": {
"status": {
$ne: "delivered"
}
}
}
},
"data.status": "delivered"
})
答案 1 :(得分:0)
您可以使用$not。
{
$and: [
{ 'data.status': { $not: /Not Started/},
{'data.status': "delivered"}
]
}
请注意,$ not必须接受正则表达式,而不仅仅是纯字符串。