我有一个文件如下:
{
"_id" : ObjectId("56423b2558cb340599108b35"),
"test" : {
"source" : [
{
"member" : "abc"
},
{
"member" : "xyz"
}
]
}
}
我想过滤数组元素 xyz,我正在尝试以下查询:
db.coll.find({ "test.source.member": "xyz"}, { "test.source.$.member": true }).pretty()
显然它曾经在 2.4 上工作,在 2.6 上它不工作,
在 2.4 上它返回“xyz”,而在 2.6 上它返回“abc”,即第一个元素。有没有办法过滤“abc”,因为最终我想更新。顺便说一句,我也试过 $elemMatch,它似乎给出了相同的输出“abc”。
谢谢。
最佳答案
根据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;
成员的值(value)将是:
xyz
关于嵌套对象中的 MongoDB 过滤器数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637867/