MongoDB中的$ elemMatch查询 [英] $elemMatch query in MongoDB

查看:1081
本文介绍了MongoDB中的$ elemMatch查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个集合'name',其中包含2个结构如下的文件:

I have a collection 'name' with 2 documents of the structure :

doc 1:

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

doc 2:

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

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

Since I am new to MongoDB, I am trying to find the difference of using the $elemMatch operator and not using it. Basically I am trying to query and find the first doc ( doc 1) with name AAA and age 10. So using the $elemMatch, my query looks like this :

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

此查询工作正常,但是我的问题是,当我可以像这样查询时,需要使用此查询什么:

This query works perfectly fine, but my question is that what's the need to use this query when I can query like this :

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

我确信$ elemMatch应该有一些原因,只是想找出区别.在此先感谢您的答复!!!

I am sure there should be some reason for $elemMatch, just trying to find the difference. Thanks in advance for the reply !!!

推荐答案

关键区别在于第二个查询(不包含$elemMatch)将仅匹配b数组中仅包含这两个字段的元素,并且只能按此顺序.

The key difference is that the second query (without the $elemMatch) would only match elements in the b array that only contained those two fields, and only in that order.

因此,第一个查询将与以下两个文档匹配,但第二个查询将不匹配:

So the first query would match the following two documents, but the second query wouldn't:

{
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中的$ elemMatch查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆