如何在MongoDB中search对象的数组

假设mongodb文档(表格)'users'是

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

我想find获得“国家奖章”的人,并且在1975年必须获得奖励。在不同年份可能有其他人获得这个奖项。

我怎样才能find这个人使用奖励types和年份。 所以我可以得到确切的人。

正确的方法是:

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

$elemMatch允许您在同一个数组元素中匹配多个组件。

没有$elemMatch mongo将在一年内获得国家奖章的用户,并在1975年获得一些奖项,但不会在1975年获得国家奖章的用户。

有关更多信息,请参阅MongoDB $ elemMatch文档 。 有关使用数组查询文档的更多信息,请参阅“ 读取操作文档 ”。

使用$ elemMatch来查找特定对象的数组

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