mongodb - 驱动更新后更新文档不起作用
问题描述
一切正常,直到
go.mongodb.org/mongo-driver v1.4.0-rc0
但不能从
go.mongodb.org/mongo-driver v1.4.0
以上。
从 v1.4.0 开始,Collection.BulkWrite() 出现以下错误:
panic: update document must contain key beginning with '$'
这是处理插入/更新的方法:
func (db *DB) BulkUpsertDataModel(ctx context.Context, documents []*dbmodel.DataModel) error {
var models []mongo.WriteModel
for _, value := range documents {
if value.Id == primitive.NilObjectID {
models = append(models, mongo.NewInsertOneModel().SetDocument(value))
} else {
var updateModel = mongo.NewUpdateOneModel()
updateModel.SetFilter(bson.M{"_id": value.Id})
updateModel.SetUpdate(value)
models = append(models, updateModel)
}
}
_, err := db.Collection(Collection).BulkWrite(ctx, models)
return err
}
数据模型的 id 是
Id primitive.ObjectID `json:"id" bson:"_id,omitempty"`
代码有什么问题?这对我来说真的很奇怪,因为它已经工作了很长时间。
解决方案
谢谢您的帮助。解决方案是
updateModel.SetUpdate(bson.D{
{"$set", value},
})
推荐阅读
- python - 如何在包含数字和字符串的列表中添加数字
- java - 尝试更新时出现休眠:LockAcquisitionException
- python - 我的 EmployeeForm 类中的“Employee_Name”的自定义验证不起作用
- javascript - 输入不工作,但在其他地方工作
- git - WebStorm - 当版本控制提交时替换整个文件而不是特殊更改
- javascript - 在 React 中访问第三方组件的输入
- javascript - 从导致问题的数组中删除特定元素
- php - Laravel 属于试图获取非对象的属性
- sql - 在 Hive 中选择方括号和引号之间的值
- javascript - 如何使用空数组填写数量