我有以下收藏
>db.prueba.find({})
{ "_id" : "A", "requi" : null }
{ "_id" : "B", "requi" : null }
{ "_id" : "C", "requi" : [ "A" ] }
{ "_id" : "D", "requi" : [ "A", "B" ] }
{ "_id" : "E", "requi" : [ "C" ] }
{ "_id" : "F", "requi" : [ "B", "D"] }
{ "_id" : "G", "requi" : [ "F" ] }
我需要requi字段的每个元素都在以下数组中。在这种情况下,数组只有一个元素
["A", "D"]
当我使用运算符$all $in
时,返回以下内容
>db.prueba.find({requi:{$elemMatch:{$in:['A','D']}}})
{ "_id" : "C", "requi" : [ "A" ] }
{ "_id" : "D", "requi" : [ "A", "B" ] }
{ "_id" : "F", "requi" : [ "B", "D" ] }
查询必须仅返回文档,因为'B'
在数组["A" , "D"]
中不存在
{ "_id" : "C", "requi" : [ "A" ] }
请帮助我
答案 0 :(得分:1)
您可以使用$setIsSubset
来检查给定数组是否是requi
数组的集合,然后使用$redact
来消除不匹配的数组。
db.collection.aggregate([
{ "$match": { "requi": { "$ne": null } } },
{ "$redact": {
"$cond": {
"if": { "$eq": [{ "$setIsSubset": ["$requi", ["A", "D"]] }, true] },
"then": "$$DESCEND",
"else": "$$PRUNE"
}
}}
])