2012-12-26 29 views
108

Ben ödül 'Ulus Madalyası' vardır ve 1975 yılında layık olmalıdır kişiyi bulmak istiyoruz 'users'MongoDB nesnenin dizideki arama nasıl yapılır

{ 
    _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 

olan mongodb belgesi (tablo) Varsayalım Farklı yıllarda bu ödüle sahip başka kişiler de olabilir.

Bu kişiyi ödül türünü ve yılını kullanarak nasıl bulabilirim. Böylece tam bir insanı bulabilirim.

cevap

202

doğru yoludur:

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

$elemMatch aynı dizi öğesi içinde birden fazla bileşen eşleşmesini sağlar.

$elemMatch olmadan Mongo

fazla bilgi için MongoDB $elemMatch Documentation bakın 1975 yılında Ulusal Madalyası ile kullanıcılar için bazı yılda Milli Madalyası ile kullanıcılar ve 1975s bazı ödülü için bakmak, ama olmaz. Dizileri olan belgeleri sorgulama hakkında daha fazla bilgi için bkz. Read Operations Documentation. Bu ikinci kez upvote olsaydı

+3

dizisini bulmak için - Ben isterim ikinci kez tekrar bu cevap indi beri haha –

5

Kullanım $ elemMatch belirli bir nesneye

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