2012-12-26 59 views
108

假設MongoDB的文件(表)「用戶」是如何對象的數組搜索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 

我想找個誰有獎「國家勳章」,必須在1975年被授予人 可能有其他人在不同年份獲得此獎項。

我怎樣才能找到這個人使用獎勵類型和年份。所以我可以得到確切的人。

回答

202

正確的方法是:

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

$elemMatch允許你在同一陣列元件內匹配多於一個的組件。

沒有$elemMatch蒙戈會尋找一些一年全國獎牌用戶和1975s一些獎,但不與國家科學獎章用戶在1975年

更多信息,請參見MongoDB $elemMatch Documentation。有關使用數組查詢文檔的更多信息,請參閱Read Operations Documentation

+3

的陣列如果我能給予好評這個第二次 - 因爲我對這個答案再次降落,第二次我會哈哈 –

5

使用$ elemMatch找到特定對象

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