假设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

10-06 03:07