假设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年获得该奖项的人可能会有其他人在不同年份获得此奖项。
如何使用奖励类型和年份查找此人。这样我就可以找到确切的人。
最佳答案
正确的方法是:
db.users.find({awards: {$elemMatch: {award:'National Medal', year:1975}}})
$elemMatch
允许您在同一数组元素中匹配多个组件。如果没有
$elemMatch
,mongo将在1975年代和某些奖项中寻找获得国家奖的用户,而不是在1975年寻找获得国家奖的用户。有关更多信息,请参见MongoDB $elemMatch Documentation。有关使用数组查询文档的更多信息,请参见Read Operations Documentation。