0

我想在 mongodb 中查询包含数组的文档,这样它的所有元素都是给定用户提供的数组的成员。换句话说,我需要选择其数组是给定数组子集的文档。例如,如果我有这个集合:

> db.foos.find()
{ "_id" : ObjectId("4fe3901d0add2727c3adc7ca"), "tags" : [ "a", "b", "c" ] }
{ "_id" : ObjectId("4fe390220add2727c3adc7cb"), "tags" : [ "a", "b" ] }
{ "_id" : ObjectId("4fe390250add2727c3adc7cc"), "tags" : [ "a" ] }
{ "_id" : ObjectId("4fe390250add2727c3adc7cd"), "tags" : [ "c" ] }

我的代码被赋予了数组["a", "b", "z"],我想要一个产生以下结果的查询:

> db.foos.find( THE_QUERY! )
{ "_id" : ObjectId("4fe390220add2727c3adc7cb"), "tags" : [ "a", "b" ] }
{ "_id" : ObjectId("4fe390250add2727c3adc7cc"), "tags" : [ "a" ] }

之所以选择这些文档,是因为["a", "b"]["a"]都是["a", "b", "z"].

4

1 回答 1

0

这个答案不能解决 OPs 问题。根据评论,MongoDB 中目前不存在所需的功能。我将其留作评论历史

您想使用$in 高级查询

$in 运算符类似于 SQL IN 修饰符,允许您指定可能匹配的数组。

这会说:“在这个给定数组中有标签值的任何 foos 文档”

db.foos.find({tags: {$in: ["a", "b", "z"]}})

如果您想查找任何特定将所有元素与给定数组相交的文档,您可以使用$all

$all 运算符类似于 $in,但不是匹配指定数组中的任何值,而是必须匹配数组中的所有值。

这会说:“任何具有包含所有这些元素的标签数组的 foos 文档”

db.foos.find({tags: {$all: ["a", "b", "z"]}})
于 2012-06-21T21:45:06.037 回答