2013-10-28 15 views
18

Sto giocando con la collezione di esempi del bios di http://docs.mongodb.org/manual/reference/bios-example-collection per informarmi sull'interrogazione di mongodb.Trova documento secondario in array con mongodb

voglio recuperare informazioni sui premi vinti da _id: 1 in anno: 1975.

ho provato diverse query, tra quelli

bios.find({ 
    "_id" : 1, 
    "awards" : { 
     "year" : 1975 
    } 
}); 

ma non ho mai ricevere il documento corretto indietro. Come posso recuperare questo documento nell'array?

risposta

31

Devi usare la dot notation:

bios.find({"_id" : 1, "awards.year" : 1975 }); 

E 'una query piuttosto inutile, perché si ha anche la _id nella query, ma credo che sia dovuto al fatto che si sta giocando con un esempio . Inoltre, stai dicendo che stai cercando premi dal 1967, ma il codice dice 1975.

Se si cerca "awards" : { "year" : 1975 }, MongoDB cercherà una corrispondenza esatta di tutto il documento secondario awards. In questo caso, non è quello che vuoi. Inoltre, poiché awards è un array, questo sarà sempre falso. Se si desidera cercare un documento premio specifico in un elenco, $elemMatch sarebbe la strada da percorrere.

+0

L'anno era un errore di battitura. Grazie mille per la spiegazione dettagliata! –

Problemi correlati