如何在 mongodb 中的对象数组中搜索

2022-08-30 00:05:22

假设 mongodb document(table) '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

我想找到获得“国家勋章”奖的人,并且必须在1975年颁发,可能会有其他人在不同年份获得此奖项。

我如何使用奖励类型和年份找到这个人。所以我可以得到确切的人。


答案 1

正确的方法是:

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

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

没有mongo将寻找在某一年获得国家勋章的用户,在1975年寻找一些奖项的用户,但不寻找在1975年拥有国家勋章的用户。$elemMatch

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


答案 2

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

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