2012-08-31 18 views
6

Ich habe ein Feld _keywords, die ein Array von Strings ist. Ich möchte Dokumente erhalten, von denen _keywords Super-Set der Abfrage-Array sind.Mongodb Abfrage Teilmenge eines Arrays

Zum Beispiel:

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

Ich will diesen Rekord retrive wenn ich Teilmenge von [ 'foo', 'foo1', 'foo2'] abfragen, zum Beispiel: [ 'foo'] [ 'foo1 ‘, 'foo2']

EDIT: so etwas wie:

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

Antwort

11

Verwenden Sie den $all Betreiber:

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

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

+0

Wie Dokumente retrive wo '_keywords 'enthält ein beliebiges Element im angegebenen Abfragearray. etwas wie: 'db.article.find ({_ Schlüsselwörter: {$ any: ['foo1', 'foo2']}})', die alle Dokumente mit _keywords zurückgibt, enthält 'foo1' oder 'foo2' – Jensen

+1

Wie ich mich erinnern kann In diesem Fall können Sie '$ in' verwenden, zum Beispiel:' db.article.find ({_ keywords: {$ in: ['foo1', 'foo2']}} ''. Überprüfen Sie, ob dies richtig ist. – Dmitry

+0

richtig, danke. – Jensen

1

Kurze Antwort: $all Betreiber.
Um Dokumente mit Array mit Obermenge von [ 'foo1', 'foo2'] abzufragen, verwenden:
db.article.find({ '_keywords': { $all: ['foo1', 'foo2'] } });

5

In MongoDB, für Array-Feld:

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