2016-10-05 93 views
0

我有給定的數組A = [5, 15, 25, 35]查找某些數組項目

我有一個集合C.它的所有文檔都有字段'數字',它是一個數字數組,長度可變。

我想匹配所有具有「數字」元素的文檔,其中至少有2個是A的4個元素。我應該如何有效地進行處理?

這將是很好使用查找和不需要聚合。

謝謝。

回答

0

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