嵌套对象中的 MongoDB 过滤器数组元素

标签 mongodb

我有一个文件如下:

{
    "_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/

相关文章:

linux - linux(ubuntu)上的mongod命令吐出随机消息

python - pymongo:更高效的更新

php - Windows 上的 MongoDB PHP 驱动程序 fatal error

javascript - 使用点符号连接字符串和变量 = 错误?

mongodb - @PrePersist EventListener spring-data-mongo 的替代品

c - 为 Win64 构建 mongo-c-driver-1.16.2 时出现问题

c# - 不支持 MongoDB 序列化 ()

node.js - 在集群中运行 meteor 并实时更改

mongodb - 我可以将 Apache Solr 与 MongoDB 同步吗

python - 当值为 mongodb 中其他对象的 _id 时,无法使用 python-eve 过滤字符串字段