查询其值在指定数组中的数组

时间:2017-03-30 15:32:44

标签: mongodb mongodb-query

参加此文件:

{
    "targets": [
        ['a', 'b'],
        ['a']
    ]
}

我想用以下目标检索它:

['a', 'b']
['a']
['a', 'b', 'c'] //because one target contains 'a' and 'b'

而不是这个:

['b'] //because non of the targets contains only 'b'

我尝试使用此查询条件,但它根本不起作用:

'targets': {
    '$elemMatch': {
        '$elemMatch': { '$in': target }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下查找查询。

db.collection.find({
    targets: {
      $elemMatch: {
        $not: {
            $elemMatch: {
                $nin: input array
            }
        }
    }
  }
});
带有$elemMatch

$nin选择具有targets元素的所有文档至少有一个数组元素,输入数组中没有值匹配元素。

db.collection.find({
    targets: {
      $elemMatch: {
            $elemMatch: {
                $nin: input array
        }
    }
  }
});

输入数组 - 选择

['a', 'b'] - false
['a'] - false
['a', 'b', 'c'] - false
['b'] - true

$not选择targets元素具有数组元素的文档,该数组元素是输入数组的子集。

db.collection.find({
    targets: {
      $elemMatch: {
        $not: {
            $elemMatch: {
                $nin: input array
            }
        }
    }
  }
});

输入数组 - 选择

['a', 'b'] - true
['a'] - true
['a', 'b', 'c'] - true
['b'] - false