我想查询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"]
的子集。
答案 0 :(得分:0)
这个答案并没有解决OP问题。根据评论,MongoDB中目前不存在所需的功能。我要留下评论历史
您想使用$in advanced query:
$ in运算符类似于SQL IN修饰符,允许您使用 指定可能匹配的数组。
这会说:“任何在此给定数组中具有标记值的foos文档”
db.foos.find({tags: {$in: ["a", "b", "z"]}})
如果要查找与给定数组的所有元素明确相交的任何文档,可以使用$all:
$ all运算符类似于$ in,但不是匹配任何值 在指定的数组中,必须匹配数组中的所有值。
这会说:“任何具有包含所有这些元素的标签数组的foos文档”
db.foos.find({tags: {$all: ["a", "b", "z"]}})