如何删除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
相关产品推荐
相关产品推荐

