如何在find({})中处理数组交集?

时间:2013-10-29 02:56:03

标签: mongodb

有一个数组,例如:

var arr = ["1","1.1","1.3","2","2.1","2.2","2.3"]

和集合A,就像这样

[
  {_id:"1",children:["1.1","1.4"]},
  {_id:"2",children:["2.1","2.2"]},
  {_id:"3",children:["3.1","3.2"]}
]

{/ p>

find({....})
我想得到结果

[
  {_id:"1",children:["1.1"]},
  {_id:"2",children:["2.1","2.2"]},
]

结果儿童的数组是arr和集合A' s children

的交集点

如何设置查询运算符?

2 个答案:

答案 0 :(得分:2)

您无法通过简单查询(查找)获得所需的结果,但您可以使用聚合框架来实现。方法如下:

var arr = ["1","1.1","1.3","2","2.1","2.2","2.3"]

db.A.aggregate([ { "$unwind" : "$children" }, 
                 { "$match"  : { "children" : { "$in" : arr } } },
                 { "$group"  : { "_id" : "$_id", "children" : { "$push" : "$children" } } }
               ]
);

样本数据的结果:

{ "_id" : "2", "children" : [  "2.1",  "2.2" ] }
{ "_id" : "1", "children" : [  "1.1" ] }

答案 1 :(得分:1)

这也不是您正在寻找的确切答案,但您可以与$in运营商非常接近:

db.i.find({
  children : { $in : arr}
})

请记住,这不会产生上述结果(它将输出数组中的所有值而不是{_id:"1",children:["1.1"]},)。

但是你可以按照我的建议,然后在你的应用程序中迭代所有结果并输出只有你的数组的子项的交集。