2012-12-26 11 views
108

Supponiamo il documento MongoDB (tabella) 'utenti' èCome cercare in serie di oggetti in MongoDB

{ 
    _id: 1, 
    name: { first: 'John', last: 'Backus' }, 
    birth: new Date('Dec 03, 1924'), 
    death: new Date('Mar 17, 2007'), 
    contribs: [ 'Fortran', 'ALGOL', 'Backus-Naur Form', 'FP' ], 
    awards: [ 
      { award: 'National Medal', 
       year: 1975, 
       by: 'NSF' }, 
      { award: 'Turing Award', 
       year: 1977, 
       by: 'ACM' } 
      ] 
} 
and other object(person)s 

voglio trovare la persona che ha award 'Medal Nazione' e deve essere assegnato nel 1975 Potrebbero esserci altre persone che hanno questo premio in anni diversi.

Come posso trovare questa persona utilizzando il tipo di premio e l'anno. Quindi posso ottenere una persona esatta.

risposta

202

Il modo giusto è:

db.users.find({awards: {$elemMatch: {award:'National Medal', year:1975}}}) 

$elemMatch consente di far corrispondere più di un componente all'interno dello stesso elemento dell'array.

Senza $elemMatch Mongo cercherà per gli utenti con National Medal in qualche anno e qualche premio nel 1975s, ma non per gli utenti con medaglia nazionale nel 1975.

Vedi MongoDB $elemMatch Documentation per maggiori informazioni. Vedere Read Operations Documentation per ulteriori informazioni sull'interrogazione di documenti con matrici.

+3

Se potessi upvote questo una seconda volta - da quando sono atterrato su questa risposta ancora una volta per la seconda volta lo farei haha –

5

Usa $ elemMatch per trovare la matrice di oggetto particolare

db.users.findOne({"_id": id},{awards: {$elemMatch: {award:'Turing Award', year:1977}}}) 
Problemi correlati