4

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

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

4

2 回答 2

11

使用 $all 条件查找同时匹配“red”和“blue”条件的记录。

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

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

db.my_collection.find({tags: { $in : ["red","blue"]}})
于 2009-12-20T22:47:05.760 回答
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 风格搜索。

正如这里这里所建议的,如果您从记录中创建所有标记的数组,则可以进行全文搜索,但我不知道它是否有效,甚至是最好的方法。

于 2010-11-18T16:23:44.440 回答