0
我有给定的数组A = [5, 15, 25, 35]
。查找某些数组项目
我有一个集合C.它的所有文档都有字段'数字',它是一个数字数组,长度可变。
我想匹配所有具有“数字”元素的文档,其中至少有2个是A的4个元素。我应该如何有效地进行处理?
这将是很好使用查找和不需要聚合。
谢谢。
我有给定的数组A = [5, 15, 25, 35]
。查找某些数组项目
我有一个集合C.它的所有文档都有字段'数字',它是一个数字数组,长度可变。
我想匹配所有具有“数字”元素的文档,其中至少有2个是A的4个元素。我应该如何有效地进行处理?
这将是很好使用查找和不需要聚合。
谢谢。
With aggregation
很简单。您需要使用$size
与$setIntersection
,然后匹配所有元素至少2个号码相交的数组中的文件:
db.C.aggregate([
{
$project: {
numbers: 1,
intersectedNumbers: {
$size: {
$setIntersection: ['$numbers', [5,15,25,35]]
}
}
}
},
{
$match: {
'intersectedNumbers': {
$gte: 2
}
}
}
])
随着find
它更成问题,因为你需要两个阶段如上aggregation
,它不是可能与find
。 但你可以做什么,如果A
数组是动态的,是创建一个将返回“至少2”元素的所有possibiltes的功能,然后用$or
和$all
使用find
:
db.C.find({
$or: [
{numbers: {$all: [5,15]}},
{numbers: {$all: [5,25]}},
{numbers: {$all: [5,35]}},
{numbers: {$all: [15,25]}},
{numbers: {$all: [15,35]}},
{numbers: {$all: [25,35]}}
]
})