mongodb - MongoDB 中的 $elemMatch 查询

标签 mongodb mongodb-query crud

我有一个集合“名称”,其中包含 2 个结构文档:

文档 1:

    {
    a: 1
    b : [{name:"AAA",age:10},
         {name:"BBB",age:12},
         {name:"CCC",age:13}]
    }

文档 2:

    {
    a: 2
    b : [{name:"DDD",age:14},
         {name:"EEE",age:15},
         {name:"FFF",age:16}]
    }

因为我是 MongoDB 的新手,所以我试图找出使用 $elemMatch 运算符和不使用它的区别。基本上,我正在尝试查询并找到名称为 AAA 且年龄为 10 岁的第一个文档 (doc 1)。因此,使用 $elemMatch,我的查询如下所示:

db.name.find({b: {$elemMatch :{name:"AAA",age:10}}})

这个查询工作得很好,但我的问题是,当我可以像这样查询时,为什么需要使用这个查询:

db.name.find({b:{name:"AAA",age:10}})

我确信 $elemMatch 应该有一些原因,只是想找出不同之处。提前感谢您的回复!!!

最佳答案

关键区别在于第二个查询(没有 $elemMatch)将只匹配 b 数组中仅包含这两个字段的元素,并且仅在订单。

所以第一个查询将匹配以下两个文档,但第二个查询不会:

{
a: 1
b: [{name: "AAA", age: 10, city: 'New York'},
    {name: "BBB", age: 12, city: 'Paris'},
    {name: "CCC", age: 13, city: 'London'}]
}

{
a: 1,
b: [{age: 10, name: "AAA"},
    {name: "BBB", age: 12},
    {name: "CCC", age: 13}]
}

关于mongodb - MongoDB 中的 $elemMatch 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41725419/

相关文章:

arrays - 查询对象与数组

node.js - 如何使用环回模型查询来查询嵌套对象?

c# - 获得 Entity Framework 6 的最佳性能,如 Dapper.NET

javascript - 如何在 Angularjs 中创建一个新实例? CRUD的save方法不起作用

mongodb - Scala 通用 MongoDB 集合

javascript - 在我的 html 中使用 Node 函数

typescript - 如何在树形结构上列出 MongoDB 中的所有项目?

mongodb - 如何在 MongoDB 中使用 $match

android - Android中查询、备份、删除、插入联系人

mongodb - Golang MGO Group By multiple params 并按日期时间抓取最后一个