gpt4 book ai didi

mongodb - 如何用前缀字符串替换数组中的所有元素?

转载 作者:可可西里 更新时间:2023-11-01 09:57:50 24 4
gpt4 key购买 nike

在我的 MongoDB 集合中,我有账户列表,每个账户都有角色,结构格式如下

{
"_id" : "acc1",
"email" : "acc1@email.com",
"password" : "password",
"roles" : [
"ADMIN",
"USER"
],
},
{
"_id" : "acc2",
"email" : "acc2@email.com",
"password" : "password",
"roles" : [
"USER"
],
},
{
"_id" : "acc2",
"email" : "acc2@email.com",
"password" : "password",
"roles" : [
"ADMIN",
"SYSTEM",
"USER",
],
}

现在,我想添加 ROLE_ 作为前缀的所有角色,那么 JSON 应该是

{
"_id" : "acc2",
"email" : "acc2@email.com",
"password" : "password",
"roles" : [
"ROLE_ADMIN",
"ROLE_SYSTEM",
"ROLE_USER",
]
}

我不知道如何实现 MongoDB 脚本来转换整个文档,将前缀附加到这样的元素。

最佳答案

您可以使用 cursor.forEach()遍历集合并更新每个文档。它非常简单,但速度很慢,不应该用于大型集合。

db.users.find().forEach(function (doc) {
var newRoles = doc.roles.map(function (value) {
return "ROLE_" + value;
});
db.users.update(
{_id: doc._id},
{$set: {roles: newRoles}}
);
});

使用 MongoDB 3.2 收集 50k 文档的测量执行时间,结果如下:

  • 这种方法:17.244s
  • user3100115 的 approach : 2.181s

显而易见的结论是只对小型集合使用这种简单方法,对大型集合坚持使用批量方法。

关于mongodb - 如何用前缀字符串替换数组中的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com