
在使用MongoDB时,有时我们需要根据不同的键来更新多条记录,这个问题可能会让人感到困惑。不过,幸好在MongoDB中,我们可以使用Bulk Write操作来实现这个目标。Bulk Write是一种批量写入操作,可以在单个操作中执行多个更新、插入或删除操作。在这篇文章中,我将向大家介绍如何使用Bulk Write来根据Mongo中的不同键更新多条记录。
如果我有类似于以下内容的内容...
collection.insertmany(context.todo(), []interface{}{
bson.m{ "_id" : 1, "member" : "abc123", "status" : "p" },
bson.m{ "_id" : 2, "member" : "xyz123", "status" : "a" },
bson.m{ "_id" : 3, "member" : "lmn123", "status" : "p" },
bson.m{ "_id" : 4, "member" : "pqr123", "status" : "d" },
bson.m{ "_id" : 5, "member" : "ijk123", "status" : "p" },
bson.m{ "_id" : 6, "member" : "cde123", "status" : "a" },
} )是否可以在一个 insertmany 查询中应用以下更新?
[{"_id" : "1", "status" : "P0-A0"},
{"_id" : "2", "status" : "P0-A1"},
{"_id" : "3", "status" : "P0-A2"},
{"_id" : "4", "status" : "P0-A3"},
{"_id" : "5", "status" : "P0-A4"},
{"_id" : "6", "status" : "P0-A5"}]如果是这样,用 golang 会如何完成?
具体来说,使用 collection.updatemany(context.todo(), filter, update),我的 filter 和 update 会有什么?
感谢您的帮助。
你不能用一个来做到这一点collection.updatemany() 调用,因为您无法对不同的匹配文档应用不同的更新文档。您必须多次调用 collection.updatemany(),每个不同的更新文档一次。
本系统经过多次升级改造,系统内核经过多次优化组合,已经具备相对比较方便快捷的个性化定制的特性,用户部署完毕以后,按照自己的运营要求,可实现快速定制会费管理,支持在线缴费和退费功能财富中心,管理会员的诚信度数据单客户多用户登录管理全部信息支持审批和排名不同的会员级别有不同的信息发布权限企业站单独生成,企业自主决定更新企业站信息留言、询价、报价统一管理,分系统查看分类信息参数化管理,支持多样分类信息,
0
如果您想通过一次调用高效地完成此操作,您可以使用 collection.bulkwrite()。您必须准备一个不同的 mongo.writemodel每个文档更新。
它可能是这样的:
wm := []mongo.writemodel{
mongo.newupdateonemodel().setfilter(bson.m{"_id": "1"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a0"}}),
mongo.newupdateonemodel().setfilter(bson.m{"_id": "2"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a1"}}),
mongo.newupdateonemodel().setfilter(bson.m{"_id": "3"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a2"}}),
mongo.newupdateonemodel().setfilter(bson.m{"_id": "4"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a3"}}),
mongo.newupdateonemodel().setfilter(bson.m{"_id": "5"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a4"}}),
mongo.newupdateonemodel().setfilter(bson.m{"_id": "6"}).setupdate(bson.m{"$set": bson.m{"status": "p0-a5"}}),
}上面的切片文字中有太多“重复”,您可以使用辅助函数捕获它们:
create := func(id, newstatus string) *mongo.updateonemodel {
return mongo.newupdateonemodel().
setfilter(bson.m{"_id": id}).
setupdate(bson.m{"$set": bson.m{"status": newstatus}})
}
wm := []mongo.writemodel{
create("1", "p0-a0"),
create("2", "p0-a1"),
create("3", "p0-a2"),
create("4", "p0-a3"),
create("5", "p0-a4"),
create("6", "p0-a5"),
}此外,如果更新中有可以轻松定义的逻辑,请使用循环而不是列出所有元素:
var wm []mongo.writemodel
for i := 1; i <= 6; i++ {
newstatus := fmt.sprintf("p0-a%d", i-1)
wm = append(wm, mongo.newupdateonemodel().
setfilter(bson.m{"_id": strconv.itoa(i)}).
setupdate(bson.m{"$set": bson.m{"status": newstatus}}),
)
}您可以通过一次调用执行所有更新,如下所示:
res, err := coll.BulkWrite(ctx, wm)
查看相关内容:mongodb 更新文档数组并替换为替换文档数组
以上就是如何在一个查询中根据 Mongo 中的不同键更新多条记录?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号