MongoDB 中的 $elemMatch 查询

Soh*_*ham 6 crud mongodb mongodb-query

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

文档 1:

    {
    a: 1
    b : [{name:"AAA",age:10},
         {name:"BBB",age:12},
         {name:"CCC",age:13}]
    }
Run Code Online (Sandbox Code Playgroud)

文档 2:

    {
    a: 2
    b : [{name:"DDD",age:14},
         {name:"EEE",age:15},
         {name:"FFF",age:16}]
    }
Run Code Online (Sandbox Code Playgroud)

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

db.name.find({b: {$elemMatch :{name:"AAA",age:10}}})
Run Code Online (Sandbox Code Playgroud)

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

db.name.find({b:{name:"AAA",age:10}})
Run Code Online (Sandbox Code Playgroud)

我相信 $elemMatch 应该有一些原因,只是试图找到差异。预先感谢您的回复!!!

Joh*_*yHK 6

关键的区别在于第二个查询(没有$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}]
}
Run Code Online (Sandbox Code Playgroud)