我通过我的应用程序在mongoDB 3.4
上运行以下查询。基本上,我想找到文档,其中属性数组具有使用 $ elemMatch
db.collectionName.find({
attributes: {
$all: [{
$elemMatch: {
"name": "manufacturer",
"value": "val1",
"status": 1
}
}, {
$elemMatch: {
"name": "model",
"value": "val2",
"status": 1
}
}]
}
})
但是,与此同时,我想运行另一个查找查询来查找上述查找条件失败的记录,即使一个 $elemMatch
失败
我怎样才能实现这个目标?
如果可能的话,我宁愿不改变我传递给全部的数组
答案 0 :(得分:1)
在评论中使用 $ not 运算符作为@nullpointer的建议,我能够这样做:
db.collectionName.find({
attributes: {
$not: {
$all: [{
$elemMatch: {
"name": "manufacturer",
"value": "val1",
"status": 1
}
}, {
$elemMatch: {
"name": "model",
"value": "val2",
"status": 1
}
}]
}
}
})
另一种我试图避免但可以使用的替代方案是 De-Morgan定理,其中包括:
NOT(A AND B和C) = NOT A OR NOT B OR NOT C ,这将构成查询
db.collectionName.find({
attributes: {
$or: [{
$elemMatch: {
"name": "manufacturer",
"value": {"$ne": "val1"},
"status": 1
}
}, {
$elemMatch: {
"name": "model",
"value": {"$ne": "val2"},
"status": 1
}
}]
}
})