你如何对mongodb中的数组进行AND查询?

时间:2009-12-20 21:47:07

标签: mongodb mongodb-shell

我有一个带有标签的数组,这些标签是文档的一部分,例如 [“红色”,“绿色”,“蓝色”,“白色”,“黑色”]

现在我想查找所有红色和蓝色的文档。

2 个答案:

答案 0 :(得分:11)

使用$ all条件查找符合“红色”和“蓝色”条件的记录。

db.my_collection.find({tags: { $all : ["red","blue"]}})

如果您想要匹配“红色”或“蓝色”的记录,那么您可以使用$ in条件。

db.my_collection.find({tags: { $in : ["red","blue"]}})

答案 1 :(得分:3)

如果有人想知道如何否定逐项搜索,即找到与“红色”和“蓝色”匹配且不匹配“绿色”和“白色”的记录,则可以使用 $ nin来完成运算符,当有人正在阅读$ nin docs时可能并不明显(http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24nin - 解析描述对我来说很棘手):

db.my_collection.find({tags: { $all : ["red","blue"], $nin : ["green", "white" ]}})

这非常酷,因为它允许相对不错的搜索语法和否定:

tokenRequired1 tokenRequired2 !tokenForbidden1 !tokenForbidden2

非常自然的Gmail风格搜索。

根据建议herehere,如果您从记录中创建所有令牌的数组,则可以进行全文搜索,但我不知道它是否有效甚至是最佳方法