mongodb - 从 mongo db $pull 中删除嵌入文档不起作用

我在 mongodb 中嵌入了文档,如何只删除一个地址,其中 pincode 为 140901 并更新 pincode 为 152364 的地址

db.add_fun.insert({
"_id" : ObjectId("5a82e6dc1139b572569fa785"),
"name" : "Vikas",
"salary" : 72.0,
"address" : [ 
    {
        "address_id" : ObjectId("5a82f0e51139b572569fa78c"),
        "address" : "Mullanpur ",
        "pincode" : "140901",
        "country" : "India"
    }, 
    {
        "address_id" : ObjectId("5a82f0e51139b572569fa78d"),
        "address" : "mohali ",
        "pincode" : "152364",
        "country" : "India"
    }
]
})

我尝试了这个,但不工作

db.add_fun.update({},
        {
            $pull: {
                        address: {
                            $elemMatch: {
                                pincode: "140901"
                            }
                        }
            }
        },
        {
            multi:true
        }
    )

想删除这个

{
"address_id" : ObjectId("5a82f0e51139b572569fa78c"),
"address" : "Mullanpur ",
"pincode" : "140901",
"country" : "India"
}, 

想要这个结果

{
    "_id" : ObjectId("5a82e6dc1139b572569fa785"),
    "name" : "Vikas",
    "salary" : 72.0,
    "address" : [ 

        {
            "address_id" : ObjectId("5a82f0e51139b572569fa78d"),
            "address" : "mohali ",
            "pincode" : "152364",
            "country" : "India"
        }
    ]
}

最佳答案

不需要$elemMAtch,只是数组中子文档的条件。在你的情况下:

db.add_fun.update(
{},
{ $pull: {
    address: {
        pincode: "140901"
    }    
} },
{ multi:true }
);

文档:https://docs.mongodb.com/manual/reference/operator/update/pull/

https://stackoverflow.com/questions/48768771/

相关文章:

node.js - mongoose.connection.collections.collecti

node.js - 学习 NodeJS 和 MongoDB Docker 组合

node.js - Mongoose 复合索引创建字段顺序

java - Spring - mongodb - 聚合 - 需要 'cursor' 选项

linux - 从 bash 提示符和脚本向 docker exec 传递参数

c# - 如何将 MongoDB 驱动程序与 C# ASP.NET Core API 框架一起使用?

java - Spring Data Mongodb 的性能问题

javascript - 如何将文件名设置为与数据库中的对象 ID 相同?

c# - MongoDB 身份验证错误

mongodb - 如何为 mongodb 副本集配置 grails 3