如何将使用UpdateOptions的 ArrayFilters的 updateOne操作从mongo-driver v1迁移到v2?
我在尝试把这个从mongo-go-driver v1迁移到v2。
filter := bson.D{bson.E{Key: "_id", Value: homeID}}
arrayFilters := options.ArrayFilters{Filters: bson.A{bson.M{"x._id": roomID}}}
opts := options.UpdateOptions{
ArrayFilters: &arrayFilters
}
update := bson.M{
"$set": bson.M{
"rooms.$[x].name": updateRoom.Name,
},
}
_, errUpdate := collHomes.UpdateOne(handler.ctx, filter, update, &opts)
这是我的尝试,但它不起作用:
filter := bson.D{bson.E{Key: "_id", Value: homeID}}
opts := options.UpdateOptions{
ArrayFilters: bson.A{bson.M{"x._id": roomID}},
}
update := bson.M{
"$set": bson.M{
"rooms.$[x].name": updateRoom.Name,
},
}
_, errUpdate := collHomes.UpdateOne(handler.ctx, filter, update, opts)
因为最后一行返回了这个错误:
- 无法将opts(类型options.UpdateOneOptions)用作类型options.Lister[options.UpdateOneOptions]。类型未实现options.Lister[options.UpdateOneOptions],因为缺少某些方法:List() []func(*options.UpdateOneOptions) error
filter := bson.D{bson.E{Key: "_id", Value: homeID}}
arrayFilters := bson.A{bson.M{"x._id": roomID}}
update := bson.M{
"$set": bson.M{
"rooms.$[x].name": updateRoom.Name,
},
}
_, errUpdate := collHomes.UpdateOne(handler.ctx, filter, update, options.UpdateOne().SetArrayFilters(arrayFilters))
如果你需要传递更多选项,你也可以用下面这种方式传递一个切片:
filter := bson.D{bson.E{Key: "_id", Value: homeID}}
arrayFilters := bson.A{bson.M{"x._id": roomID}}
opts := []options.Lister[options.UpdateOneOptions]{
options.UpdateOne().SetUpsert(true),
options.UpdateOne().SetArrayFilters(arrayFilters))
}
_, errUpdate := collHomes.UpdateOne(handler.ctx, filter, update, opts...)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。