Arrays MongoDB查找数组的交集
文件: 想要获得:Arrays MongoDB查找数组的交集,arrays,mongodb,Arrays,Mongodb,文件: 想要获得: order1.filter = ['tag1','tag2'] order2.filter = ['tag1','tag2','tag3'] 所有价值观order.filter必须在查询数组中 怎么做?已尝试的指令$all,$in:(您可以使用聚合框架完成此操作(据我所知,使用常规查找无法完成此操作) 我认为这基本上是为了调整字段的代码,得到如下结果: query ['tag1','tag2'] -> (only order1) query ['tag1','ta
order1.filter = ['tag1','tag2']
order2.filter = ['tag1','tag2','tag3']
所有价值观order.filter必须在查询数组中
怎么做?已尝试的指令$all,$in:(您可以使用聚合框架完成此操作(据我所知,使用常规查找无法完成此操作) 我认为这基本上是为了调整字段的代码,得到如下结果:
query ['tag1','tag2'] -> (only order1)
query ['tag1','tag2','tag3'] -> (order1 and order2)
query ['tag1','tag2','tag3','tag4', etc ] -> (order1 and order2)
and
query ['tag1','tag3'] -> (null)
query ['tag2','tag3'] -> (null)
对不起,我不明白问题是关于什么的。我也不明白。可能是重复的
//sample documents:
> db.docs.find({},{_id:0})
{ "order" : 1, "filter" : [ "t1", "t2" ] }
{ "order" : 2, "filter" : [ "t1", "t2", "t3" ] }
var tagArray = [ "t1", "t2" ]; // array to "match"
db.docs.aggregate( [
{
"$project" : {
"order" : 1,
"filter" : 1,
"killFlag" : {
"$const" : [
true,
false
]
}
}
},
{
"$unwind" : "$filter"
},
{
"$unwind" : "$killFlag"
},
{
"$match" : {
"$nor" : [
{
"filter" : {
"$in" : tagArray
},
"killFlag" : true
}
]
}
},
{
"$group" : {
"_id" : "$order",
"filter" : {
"$addToSet" : "$filter"
},
"killFlag" : {
"$max" : "$killFlag"
}
}
},
{
"$match" : {
"killFlag" : false
}
},
{
"$project" : {
"_id" : 1,
"filter" : 1
}
}
]);