在find方法中使用AND - 运算符

时间:2013-10-04 19:10:42

标签: mongodb

我有一个带有数组字段的集合。如果我想查找具有特定标记的所有文档,请使用下一个查询:

db.Bookmarks.find({tags : {$regex: "bbb"}})

是否有可能找到2个或更多特定标签的所有文件?像这样:

db.Bookmarks.find({tags : {$regex: "bbb"}}).find({tags : {$regex: "ccc"}})

db.Bookmarks.find({tags : {$regex: "bbb" and "ccc"}})

更新

所有文件:

> db.Bookmarks.find()
{ "Name" : "Lenta.ru", "Timestamp" : 1380912671423, "URL" : "http://www.lenta.ru", "_id" : "8vJgjH2rKAsyfHPc9", "tags" : [  "aaa",  "bbb" ] }
{ "Name" : "Яндекс", "Timestamp" : 1380912663299, "URL" : "http://www.ya.ru", "_id" : "39o2BvPHgEHkzvS4Y", "tags" : [  "aaa",  "ccc" ] }
{ "Name" : "Google", "Timestamp" : 1380912656968, "URL" : "http://www.google.com", "_id" : "MkCYfEn3WenpFvQcm", "tags" : [  "aaa",  "bbb",  "ccc" ] }

我希望同时获得标签“bbb”和“ccc”的所有文件。像

这样的东西
db.Bookmarks.find({tags : {$regex: "bbb" and "ccc"}})

结果将是:

{ "Name" : "Google", "Timestamp" : 1380912656968, "URL" : "http://www.google.com", "_id" : "MkCYfEn3WenpFvQcm", "tags" : [  "aaa",  "bbb",  "ccc" ] }

1 个答案:

答案 0 :(得分:2)

您可以使用$all查询运算符执行此操作:

db.Bookmarks.find({tags: {$all: ['bbb', 'ccc']}})

您也可以使用正则表达式。要包含以c开头的标记:

db.Bookmarks.find({tags: {$all: ['bbb', /^c/]}})