我的文件如下:
{
"_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"。
感谢。
答案 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