查询嵌套,2个leve,MongoDB中的对象数组

时间:2017-05-22 18:31:16

标签: mongodb mongodb-query

我正在尝试查询具有以下结构的coolection:

{
"_id" : ObjectId("58eed22d09865610c23453e3"),
"name" : "Maria das Dores",
"type" : "P",
"nickname" : "Dolores",
"notes" : "Notas\r\n\r\nCom quebra de página",
"updated_at" : ISODate("2017-04-13T01:19:41.000Z"),
"created_at" : ISODate("2017-04-13T01:19:41.000Z"),
"emails" : [ 
    {
        "value" : "maria@dores.com",
        "default" : true,
        "updated_at" : ISODate("2017-04-13T01:19:41.000Z"),
        "created_at" : ISODate("2017-04-13T01:19:41.000Z"),
        "_id" : ObjectId("58eed22d09865610c23453e4")
    }, 
    {
        "value" : "maria@semdores.com",
        "_id" : ObjectId("58eed23d09865605614005c4"),
        "updated_at" : ISODate("2017-04-13T01:19:57.000Z"),
        "created_at" : ISODate("2017-04-13T01:19:57.000Z")
    }
],
"phones" : [ 
    {
        "value" : "(33) 8282383-2933",
        "default" : false,
        "updated_at" : ISODate("2017-04-25T12:11:14.000Z"),
        "created_at" : ISODate("2017-04-13T01:19:41.000Z"),
        "_id" : ObjectId("58eed22d09865610c23453e5")
    }, 
    {
        "value" : "(85) 101010-1010101",
        "default" : true,
        "_id" : ObjectId("58ff3ce209865605681f40c2"),
        "updated_at" : ISODate("2017-04-25T12:11:14.000Z"),
        "created_at" : ISODate("2017-04-25T12:11:14.000Z")
    }, 
    {
        "value" : "21343243343",
        "_id" : ObjectId("58ff3d7d0986560b861c3b32"),
        "updated_at" : ISODate("2017-04-25T12:13:49.000Z"),
        "created_at" : ISODate("2017-04-25T12:13:49.000Z")
    }
],
"copartner" : {
    "enabled" : true,
    "updated_at" : ISODate("2017-05-17T00:32:42.000Z"),
    "created_at" : ISODate("2017-05-11T02:35:40.000Z"),
    "_id" : ObjectId("5913cdfc09865664df031ec2"),
    "applications" : {
        "0" : {
            "application_id" : "58e46443098656283d225b52",
            "responsibility" : "DEV",
            "percentage" : 1250,
            "_id" : ObjectId("591a6f9d0986563c174cefd3"),
            "updated_at" : ISODate("2017-05-16T03:18:53.000Z"),
            "created_at" : ISODate("2017-05-16T03:18:53.000Z")
        },
        "1" : {
            "application_id" : "58e46443098656283d225b52",
            "responsibility" : "SALE",
            "percentage" : 2000,
            "_id" : ObjectId("591b9a2a09865605697fe3e3"),
            "updated_at" : ISODate("2017-05-17T00:32:42.000Z"),
            "created_at" : ISODate("2017-05-17T00:32:42.000Z")
        }
    }
}
}

我已经使用“点”表示法并使用$elemMatch进行测试,但没有一个会导致任何匹配。

点符号查询:

db.getCollection('persons').find({
    "copartner.applications.application_id": "58e46443098656283d225b52"
})

$ elemMatch查询:

db.getCollection('persons').find({
    "copartner.applications": { $elemMatch: { "applications_id": "58e46443098656283d225b52" } }
})

1 个答案:

答案 0 :(得分:0)

点符号可用于以下任一查询:

db.getCollection('persons').find({
"copartner.applications.0.application_id": "58e46443098656283d225b52"})

db.getCollection('persons').find({
"copartner.applications.1.application_id": "58e46443098656283d225b52"})

“applications”不是数组,因此$ elemMatch不适用。 “0”和“1”是嵌套字段而不是数组元素。如果可以的话,最好将数组用于“应用程序”。