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

问题描述 投票:1回答:2

有一个数组,例如:

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

和一个集合A,就像这样

[{_id:“ 1”,子代:[“ 1.1”,“ 1.4”]},{_id:“ 2”,子代:[“ 2.1”,“ 2.2”]},{_id:“ 3”,儿童:[“ 3.1”,“ 3.2”]}]

by

find({....})
我想得到结果
[{_id:“ 1”,孩子:[“ 1.1”]},{_id:“ 2”,子代:[“ 2.1”,“ 2.2”]},]

结果子数组是arr和集合Achildren的交集>

如何设置查询运算符?

有一个数组,例如:var arr = [“ 1”,“ 1.1”,“ 1.3”,“ 2”,“ 2.1”,“ 2.2”,“ 2.3”]和一个Collection A,就像这样[{_id:“ 1”,孩子:[“ 1.1”,“ 1.4”]},{_ id:“ 2”,孩子:[“ 2.1”,“ 2.2”]},{_ id:...

mongodb
2个回答
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" } } }
               ]
);

1
投票

这也不是您要查找的确切答案,但是您可以使用$in运算符非常接近:


0
投票

您可以使用mongodb $ all运算符获取过滤后的数据https://docs.mongodb.com/manual/reference/operator/query/all/

© www.soinside.com 2019 - 2024. All rights reserved.