2012-07-24 20 views
24

que tienen la siguiente estructura documento:Mongo DB - Consulta de matriz anidada y objetos

{ 
    "_id":"12345", 
    "value":{ 
     "T":0, 
     "v":[ 
     { 
      "name":"JW", 
      "cost":100 
     } 
     ] 
    } 
} 

¿Cómo consultar la tecla del nombre? Probé la notación de puntos, pero sin suerte (creo que funciona por sólo dos niveles)

+0

Si por casualidad estaba haciendo un _group by_, entonces necesita usar la operación '$ unwind' en la tecla' value.v' antes de poder operar en los campos 'name' /' cost'. –

Respuesta

29

No está claro exactamente lo que ha intentado, pero esto debería trabajar para encontrar el documento anterior por name:

db.collection.find({ "value.v.name": "JW" }) 

Reference

+0

Gracias, estoy seguro de que no funcionó para mí, tal vez tengo la consulta incorrecta. –

+3

No creo que pueda usar el operador de punto en una matriz. –

+1

@ SamuelO'Malley Acabo de actualizar el enlace de referencia que muestra mejor que esto es compatible con matrices. – JohnnyHK

12

debe utilizar $elemMatch operador:

db.collection.find({ 
    'value.v': { 
     $elemMatch: { 
      name: 'JW', // "name == 'JW'" 
      cost : 100 //if you need "&& cost == 100" 
     } 
    } 
}); 

Mongo docs