我有一个带有标签的数组,这些标签是文档的一部分,例如 [“红色”,“绿色”,“蓝色”,“白色”,“黑色”]
现在我想查找所有红色和蓝色的文档。
答案 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风格搜索。