2012-08-31 54 views
6

我有一个字段_keywords这是一个字符串数组。我想获取哪些_keywords超级查询数组的文档。一个数组的mongodb查询子集

例如:

db.article.insert({'_keywords': ['foo', 'foo1', 'foo2']}) 

我想,当我查询[ '富', 'foo1', 'foo2的'],如子集以检索该记录:[ '富'],['foo1 ”, 'foo2的']

编辑: 类似:

db.article.find({'_keywords': {$contains: array}}) 

回答

11

使用$all操作:

db.article.find({ _keywords: { $all: [ 'foo1', 'foo2' ] } }); 

来源:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all

+0

如何以检索文档其中'_keywords '包含给定查询数组中的任何项目。例如:'db.article.find({_ keywords:{$ any:['foo1','foo2']}})',它返回任何带有_keywords的文档,包含'foo1'或'foo2' – Jensen

+1

正如我所记得的,在这种情况下,您可以使用'$ in',例如:'db.article.find({_ keywords:{$ in:['foo1','foo2']}})'。检查这是否正确。 – Dmitry

+0

正确,谢谢。 – Jensen

1

简短的回答:$all操作。
要查询文档与[ 'foo1', 'foo2的']的超集数组,使用:
db.article.find({ '_keywords': { $all: ['foo1', 'foo2'] } });

5

在MongoDB中,对于数组字段:

"$in:[...]" means "intersection" or "any element in", 
"$all:[...]" means "subset" or "contain", 
"$elemMatch:{...}" means "any element match" 
"$not:{$elemMatch:{$nin:[...]}}" means "superset" or "in"