当前位置: 首页 > 知识库问答 >
问题:

如何在mongoDB中搜索对象数组

宫俊才
2023-03-14

假设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年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。

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

共有3个答案

欧阳何平
2023-03-14

正如上面的答案所解释的那样,要从整个数组中只返回一个字段,您可以使用投影到find中。并使用$

db.getCollection("sizer").find(
  { awards: { $elemMatch: { award: "National Medal", year: 1975 } } },
  { "awards.$": 1, name: 1 }
);

将返回

{
    _id: 1,
    name: {
        first: 'John',
        last: 'Backus'
    },
    awards: [
        {
            award: 'National Medal',
            year: 1975,
            by: 'NSF'
        }
    ]
}
宰父涵忍
2023-03-14

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

db.users.findOne({"_id": id},{awards: {$elemMatch: {award:'Turing Award', year:1977}}})
吕征
2023-03-14

正确的方法是:

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

使用“$elemMatch”可以匹配同一阵列元素中的多个组件。

如果没有$elemMatchmongo将在某一年寻找拥有国家奖章的用户,并在1975年寻找一些奖项,但不会寻找拥有1975年国家奖章的用户

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

 类似资料:
  • 问题内容: 假设mongodb文档(表)“用户”为 我想找到获得“国家奖章”的人,必须在1975年获得该奖。可能会有其他人在不同的年份获得此奖。 如何使用奖励类型和年份查找此人。这样我就可以找到确切的人。 问题答案: 正确的方法是: 允许您在同一数组元素中匹配多个组件。 没有mongo的用户会在1975年代和某些奖项中寻找获得National Medal的用户,但不会寻找1975年获得Nation

  • 我有两个java对象:MyObject和MyObjectDetails 搜索空值或空字符串的最佳且简单的方法是什么? 实际上,我正在为这个类使用一个特定的验证器,逐字段检查空值和空字符串。 例如,要检查空值,我使用: 但我也很喜欢将来可以用来制作其他物体的东西。

  • 在springboot中,您可以拥有一个

  • 我读了这篇文章,看到了如何在MongoDB中搜索记录的名字: http://docs.mongodb.org/manual/reference/sql-comparise/ 但是,如果我的字符串有两个单词(即firstname和lastname),我如何搜索firstname和lastname。 在MySQL中,我正在使用: 其中数据包含“Mike Thompson”。

  • 本文向大家介绍在C#中搜索SortedList对象,包括了在C#中搜索SortedList对象的使用技巧和注意事项,需要的朋友参考一下 要在SortedList对象中进行搜索,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 问题内容: 我有一个对象列表,列表很大。对象是 现在,我必须在列表中搜索对象的特定值。假设 我必须返回那些对象(我的搜索并不总是基于value3) 清单是 有效的方法是什么? 谢谢。 问题答案: 您可以尝试使用Apache Commons Collections。 有一个CollectionUtils类,允许您通过自定义谓词选择或过滤项目。 您的代码将如下所示: 更新: 在 java8中 ,使用