Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配包含MongoDB中提供的数组的任意组合的数组字段_Mongodb - Fatal编程技术网

匹配包含MongoDB中提供的数组的任意组合的数组字段

匹配包含MongoDB中提供的数组的任意组合的数组字段,mongodb,Mongodb,我希望使用指定的数组元素列表进行查询,以便返回的文档只能包含我传递的元素,而不必包含所有元素 给定文件,如: { name: "Article 1", tags: ["Funny", "Rad"] } { name: "Article 2", tags: ["Cool", "Rad"] } { name: "Article 3", tags: ["Rad"] } 下面是一些示例数组及其各自的结果 [“Rad”]应返回第3条 [“Rad”,“Cool”]应返回第2条

我希望使用指定的数组元素列表进行查询,以便返回的文档只能包含我传递的元素,而不必包含所有元素

给定文件,如:

{
  name: "Article 1",
  tags: ["Funny", "Rad"]
}

{
  name: "Article 2",
  tags: ["Cool", "Rad"]
}

{
  name: "Article 3",
  tags: ["Rad"]
}
下面是一些示例数组及其各自的结果

  • [“Rad”]
    应返回第3条
  • [“Rad”,“Cool”]
    应返回第2条和第3条
  • [“搞笑”、“酷”]
    不应返回任何内容,因为没有文章只包含一个或两个标签

我相信我可以用
$where
实现这一点,但出于明显的原因,我希望避免使用这一点。

可以通过组合多个运算符来实现这一点:

db.test.find({tags:{$not:{$elemMatch:{$nin:['Rad','Cool']}})
带有
$nin
$elemMatch
正在查找单个
标记既不是'Rad'也不是'Cool'的文档,然后父
$not
反转匹配以返回与任何元素都不匹配的所有文档

但是,这也将返回
标记
缺失或没有元素的文档。要排除这些元素,您需要添加一个限定符,以确保
标记
至少有一个元素:

db.test.find({
标记:{$not:{$elemMatch:{$nin:['Rad','Cool']}},
'tags.0':{$exists:true}
})

希望跟进这一点,并指出几个月后,由于我们的收藏规模不断扩大,这一功能不再适用于我们。因为此查询使用了
$nin
$not
,所以Mongo必须执行完整的集合扫描才能执行查询。