2016-10-05 61 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]}} 
    ] 
})