我正在从mgo驱动程序迁移,而我的函数如下所示:
queue := collection.Bulk()
for j := range changes {
..
queue.Update(doc, update)
}
saveResult, err := queue.Run()
这样可以在一个循环中对单个文档进行一些
$push
和$set
更新。我应该如何与官方司机一起这样做?是
collection.BulkWrite()
还是collection.UpdateMany()
?文档是如此含糊,我迷失了两者的用法以及两者之间的区别。任何帮助,将不胜感激。 最佳答案
对于您的用例,您将使用collection.BulkWrite
。您可以在存储库的examples directory中找到有关如何使用go-mongo-driver
的示例。collection.UpdateMany()
将使用相同的更新过滤器和修改来更新集合中的多个文档。 mongo shell等效项的docs中还有很多文档。例子:
result, err := coll.UpdateMany(
context.Background(),
bson.NewDocument(
bson.EC.SubDocumentFromElements("qty",
bson.EC.Int32("$lt", 50),
),
),
bson.NewDocument(
bson.EC.SubDocumentFromElements("$set",
bson.EC.String("size.uom", "cm"),
bson.EC.String("status", "P"),
),
bson.EC.SubDocumentFromElements("$currentDate",
bson.EC.Boolean("lastModified", true),
),
),
)
collection.BulkWrite()
将执行一组bulk write operations。前几天,对于Go驱动程序,BulkWrite API仅为introduced。例子很少,但是您可以随时检查测试文件。例子:
var operations []mongo.WriteModel
operation := mongo.NewUpdateOneModel()
operation.Filter(bson.NewDocument(
bson.EC.SubDocumentFromElements("qty",
bson.EC.Int32("$lt", 50),
),
))
operation.Update(bson.NewDocument(
bson.EC.SubDocumentFromElements("$set",
bson.EC.String("size.uom", "cm"),
bson.EC.String("status", "P"),
),
bson.EC.SubDocumentFromElements("$currentDate",
bson.EC.Boolean("lastModified", true),
),
))
operations = append(operations, operation)
result, err := coll.BulkWrite(
context.Background(),
operations,
)
关于go - 如何使用MongoDB的Go驱动程序进行BulkWrite\UpdateMany,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53019925/