2012-07-24 14 views
24

ho la seguente struttura del documento:Mongo db - Interrogazione array nidificato e oggetti

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

Come faccio a interrogare la chiave nome? Ho provato la notazione del punto, ma senza fortuna (penso che funziona per soli due livelli)

+0

Se per caso si è in presenza di un _gruppo_, è quindi necessario utilizzare l'operazione '$ unwind' sulla chiave' value.v' prima di poter operare sui campi 'name' /' cost'. –

risposta

29

Non è chiaro esattamente ciò che si è tentato, ma questo dovrebbe lavorare per trovare il documento di cui sopra per name:

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

Reference

+0

Grazie, sono sicuro che non ha funzionato per me, forse ho sbagliato la query. –

+3

Non penso che tu possa usare l'operatore punto su un array. –

+1

@ SamuelO'Malley Ho appena aggiornato il link Reference che mostra meglio che questo è supportato con gli array. – JohnnyHK

12

Si dovrebbe usare $elemMatch operatore:

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

Mongo docs