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]}}
]
})