2012-08-31 19 views
6

Mam pole _keywords, które jest tablicą ciągów. Chcę uzyskać dokumenty, z których _keywords są super-zestaw tablice kwerendy.podzbiór zapytań mongodb tablicy

Na przykład:

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

że chce sprowadzaniu tę płytę, gdy zapytanie podzbiór [ 'foo' 'foo1', 'foo2'], na przykład: [ 'foo'], [ 'foo1 ”, 'foo2']

EDIT: coś takiego:

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

Odpowiedz

11

użyć operatora $all:

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

Źródło: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all

+0

Jak sprowadzaniu dokumentów gdzie '_keywords 'zawiera dowolny element z danej tablicy zapytań. coś takiego: 'db.article.find ({_ keywords: {$ any: ['foo1', 'foo2']}})), który zwraca wszystkie dokumenty z kluczem _wordywords zawiera 'foo1' lub 'foo2' – Jensen

+1

Jak pamiętam , w takim przypadku możesz użyć '$ in', na przykład:' db.article.find ({_ keywords: {$ in: ['foo1', 'foo2']}}) '. Sprawdź, czy to prawda. – Dmitry

+0

poprawne, dziękuję. – Jensen

1

Krótka odpowiedź: $all operator.
Aby wyszukać dokumenty z tablicy z rozszerzeniem z dnia [ 'foo1', 'foo2'], należy:
db.article.find({ '_keywords': { $all: ['foo1', 'foo2'] } });

5

W MongoDB, na polu tablicy:

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