如何查询具有给定数组中包含的数组属性的文档

时间:2012-06-21 21:28:27

标签: mongodb

我想查询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"]的子集。

1 个答案:

答案 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"]}})