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

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

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

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

最佳答案

正确的做法是:

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

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

如果没有 $elemMatch,mongo 将寻找在某年获得国家奖章和在 1975 年获得某项奖项的用户,但不会寻找在 1975 年获得国家奖章的用户。

见 MongoDB $elemMatch Documentation了解更多信息。见 Read Operations Documentation有关使用数组查询文档的更多信息。

https://stackoverflow.com/questions/14040562/

相关文章:

macos - mongodb,macos - 限制警告

arrays - 如何在 mongodb 中更新多个数组元素

mongodb - 如何为 MongoDB 集合中的所有文档选择单个字段?

mongodb - 对于小型 .NET 应用程序,什么是好的数据库选择?

mongodb - 更改 MongoDB 数据存储目录

database - 如何使用mongoimport导入csv

mongodb - 在两个不同的集合中生成重复的 Mongo ObjectId 的可能性?

mongodb - 无法启动 mongodb 本地服务器

mongodb - 根据日期返回查询

node.js - 比较 Mongoose _id和字符串