嵌套对象

时间:2015-11-10 19:20:26

标签: mongodb

我的文件如下:

{
    "_id" : ObjectId("56423b2558cb340599108b35"),
    "test" : {
        "source" : [
            {
                "member" : "abc"
            },
            {
                "member" : "xyz"
            }
        ]
    }
}

我想过滤数组元素xyz,我正在尝试以下查询:

db.coll.find({" test.source.member":" xyz"},{" test.source。$。member":true })。漂亮()

显然它曾经用于2.4,在2.6上它不起作用,

在2.4上它返回" xyz",而在2.6上它返回" abc"即第一个元素。有没有办法过滤" abc"因为最终我想要更新。顺便说一句,我也尝试过$ elemMatch,它似乎给出了相同的输出" abc"。

感谢。

1 个答案:

答案 0 :(得分:1)

根据Docs,如果你运行2.6,这应该给你正确的输出:

db.coll.find({ "test.source.member" : "xyz"}, { "test.source.$" : 1}).pretty()

您可以通过以下方式提取成员:

var member = db.coll.find(
                 { "test.source.member" : "xyz"},
                 { "test.source.$" : 1}
                 ).test.source[0].member;

成员的价值是:

xyz