查询文档嵌套的multiarray-array mongodb elemMatch

时间:2015-11-18 20:20:15

标签: mongodb multidimensional-array

我有这些文件:

//document 1
{
    info : [
        {
            id  : 100,
            field : {                   
                a : 1,
                b : 2
            }
        },
        {
            id  : 200,
            field : {                   
                a : 3,
                b : 4
            }
        },
        {
            id  : 300,
            field : {                   
                a : 5,
                b : 6
            }
        }
    ]
},
//document 2
{
    info : [
        {
            id  : 400,
            field : {                   
                a : 7,
                b : 8
            }
        },
        {
            id  : 500,
            field : {                   
                a : 9,
                b : 10
            }
        }
    ]
}

我需要找到值为field.a = 7和field.b = 8的子文档的id,这意味着id值为400.

我试过的是$ elemMatch,但我无法得到结果。

我的尝试:

尝试1:

db.mycollection.findOne({info : {$elemMatch : {  'field.$.a':7,'field.$.b':8   } } });

尝试2:

db.mycollection.findOne({info:{$elemMatch:{$elemMatch:{'field.$.a':7,'field.$.b':8,}}}});

尝试3:

db.mycollection.findOne({info:{$elemMatch:{$elemMatch:{'field.a.$':7,'field.b.$':8,}}}});

尝试4:

db.mycollection.findOne({info:{$elemMatch:{'field.$.a':7,'field.$.b':8,}}});

1 个答案:

答案 0 :(得分:1)

$elemMatch运算符就像它对其所处理的指定数组元素的“迷你查询”一样工作,因此参数进入内部。此外positional $运算符是“投影”的概念,而不是查询文档本身,因此这是一个单独的元素:

db.mycollection.find(
    {
        "info": {
            "$elemMatch": { "field.a": 7 , "field.b": 8 }
        }
    },
    { "info.$": 1 }
)

两者都匹配包含匹配元素的文档,然后由于投影而仅返回匹配的元素:

{
        "_id" : ObjectId("564d52979f28c6e0feabceee"),
        "info" : [
                {
                        "id" : 400,
                        "field" : {
                                "a" : 7,
                                "b" : 8
                        }
                }
        ]
}