You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除MongoDB数组中符合多字段匹配条件的嵌套元素

失效原因

你的写法未命中目标元素的核心是类型不匹配:你传入的amount值是整数类型12,但文档中存储的amount是BSON双精度浮点数类型,同时没有正确匹配嵌套结构,导致MongoDB无法定位到要删除的数组元素。

修复方案

有两种可用的写法,任选一种即可:

方案1:完整匹配元素结构

严格按照存储的BSON结构编写匹配规则:

update := bson.M{
    "$pull": bson.M{
        "expenses": bson.D{
            {"category", "food"},
            {"amount", bson.D{{"$numberDouble", "12.0"}}},
        },
    },
}
_, err := c.Coll.UpdateOne(context.TODO(), bson.M{"chatID": chatID}, update)
// 自行补充错误处理逻辑

方案2:匹配字段值(更简洁)

传入float64类型的数值和存储的双精度类型对齐,MongoDB会自动匹配对应字段:

update := bson.M{
    "$pull": bson.M{
        "expenses": bson.M{
            "category": "food",
            "amount": 12.0,
        },
    },
}
_, err := c.Coll.UpdateOne(context.TODO(), bson.M{"chatID": chatID}, update)
// 自行补充错误处理逻辑

两种写法执行后都会将expenses数组中符合条件的元素删除,得到你期望的文档结构。


内容的提问来源于stack exchange,提问作者satad227

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:07