2012-08-31 23 views
6

Tengo un campo _keywords que es una matriz de cadenas. Quiero obtener documentos de los cuales _keywords son superconfigurados de la matriz de consulta.subconjunto de consulta mongodb de una matriz

Por ejemplo:

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

Quiero retrive este registro cuando consulto subconjunto de [ 'foo', 'foo1', 'foo2'], por ejemplo: [ 'foo'], [ 'foo1 ', 'foo2']

EDIT: algo como:

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

Respuesta

11

uso del operador $all:

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

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

+0

Cómo retrive documentos donde '_keywords 'contiene cualquier elemento en la matriz de consulta dada. algo así como: 'db.article.find ({_ palabras clave: {$ any: ['foo1', 'foo2']}})', que devuelve cualquier documento con _keywords contiene 'foo1' o 'foo2' – Jensen

+1

Como puedo recordar , en tal caso, puede usar '$ in', por ejemplo:' db.article.find ({_ palabras clave: {$ en: ['foo1', 'foo2']}}) '. Verifica si esto es correcto. – Dmitry

+0

correcto, gracias. – Jensen

1

Respuesta corta: $all operador.
Para consultar los documentos con matriz con superconjunto de [ 'foo1', 'foo2'], utilice:
db.article.find({ '_keywords': { $all: ['foo1', 'foo2'] } });

5

En MongoDB, por campo de matriz:

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