如何在MongoDB中对数组执行AND查询?

4

我有一个包含标签的数组,例如["red", "green", "blue", "white", "black"],它是文档的一部分。

现在我想要找到所有包含红色和蓝色标签的文档。

2个回答

11
使用 $all 条件来查找同时匹配 "红色" 和 "蓝色" 条件的记录。
db.my_collection.find({tags: { $all : ["red","blue"]}})

如果您想要匹配"red"或"blue"的记录,则可以使用$in条件。

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

3

如果有人想知道如何对项目化搜索进行否定,即查找与“红色”和“蓝色”匹配但不与“绿色”和“白色”匹配的记录,可以使用$nin操作符来实现,当阅读$nin文档时可能并不明显(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的搜索。
正如这里这里所建议的那样,如果您创建一个记录中所有令牌的数组,就可以进行全文搜索,尽管我不知道这是否高效或者是最好的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接