MongoDB 当数组元素不匹配时查询到 return 空结果
MongoDB query to return empty result when an array element does not match
我有一个如下所示的 MongoDB 文档,我想查询 values.mark 大于 50 且 available=true 和 return 文档时 values.available=true。如果值中的任何一个具有 available=False,则整个文档不应 returned。
{
"_id": 1,
"values": [
{
"mark": 30,
"available": true
},
{
"mark": 80,
"available": false
},
{
"mark": 65,
"available": true
}
]
}
查询:
{"values.mark": {"$gt":50}, 'values.available': true}
查询结果
{
"_id": 1,
"values": [
{
"mark": 30,
"available": true
},
{
"mark": 80,
"available": false
},
{
"mark": 65,
"available": true
}
]
}
在上述情况下,available 的值之一是 False,因此它不应该 return 文档,而应该是空的。有人可以帮助我如何达到预期的结果吗?
也许是这样的:
db.collection.find({
"values.mark": {
$gt: 50
},
$nor: [
{
"values": {
$elemMatch: {
"available": {
$nin: [
true
]
}
}
}
}
]
})
我有一个如下所示的 MongoDB 文档,我想查询 values.mark 大于 50 且 available=true 和 return 文档时 values.available=true。如果值中的任何一个具有 available=False,则整个文档不应 returned。
{
"_id": 1,
"values": [
{
"mark": 30,
"available": true
},
{
"mark": 80,
"available": false
},
{
"mark": 65,
"available": true
}
]
}
查询:
{"values.mark": {"$gt":50}, 'values.available': true}
查询结果
{
"_id": 1,
"values": [
{
"mark": 30,
"available": true
},
{
"mark": 80,
"available": false
},
{
"mark": 65,
"available": true
}
]
}
在上述情况下,available 的值之一是 False,因此它不应该 return 文档,而应该是空的。有人可以帮助我如何达到预期的结果吗?
也许是这样的:
db.collection.find({
"values.mark": {
$gt: 50
},
$nor: [
{
"values": {
$elemMatch: {
"available": {
$nin: [
true
]
}
}
}
}
]
})