gpt4 book ai didi

regex - 删除 MongoDB 集合中字符串字段值中的所有空格

转载 作者:行者123 更新时间:2023-12-05 02:00:04 25 4
gpt4 key购买 nike

我有一个名为“users”的 mongodb 集合,有几千个用户。由于缺乏验证,用户能够创建其中包含空格的“username”。即,用户能够创建诸如“I am the best”或“ I am the best”或“I am the best ”之类的用户名“等等。由于“用户名”字段未在系统中以任何形式使用,因此直到现在都还可以。

从现在开始,客户端终于要使用“用户名”字段,即制作“https://example.com/profile/{username}”这样的url。

问题在于,如上所示,“用户名”字段值的开头、中间和结尾处随机有空格。所以我想使用查询删除它们。

我可以列出所有用户:

db.users.find({username:{ "$regex" : ".*[^\S].*" , "$options" : "i"}}).pretty();

删除用户名字段中的所有空格并将它们保存回来的最佳方法是什么?我不确定如何在单个查询中更新它们。

感谢您的帮助!

附言。我实际上需要编写一个代码块来替换这些用户名,同时检查“现有”用户名,以便没有重复,但如果我需要使用 mongodb 查询,我仍然想知道我该怎么做。

最佳答案

The problem is this that the "username" field values have spaces at the beginning, middle and at the end as shown above, on random. So I want to remove them using a query.

MongoDB 4.4 或更高版本:

您可以使用 update with aggregation pipeline从 MongoDB 4.2 开始,

  • $replaceAll从 MongoDB 4.4 开始
  • 它会找到空白并替换为空白
db.users.update(
{ username: { $regex: " " } },
[{
$set: {
username: {
$replaceAll: {
input: "$username",
find: " ",
replacement: ""
}
}
}
}],
{ multi: true }
)

Playground


MongoDB 4.2 或更高版本:

您可以使用 update with aggregation pipeline从 MongoDB 4.2 开始,

  • $trim 去除左右两侧的空白
  • $split 按空格和结果数组拆分用户名
  • $reduce 迭代上述拆分结果的循环
  • $concat 连接用户名
db.users.update(
{ username: { $regex: " " } },
[{
$set: {
username: {
$reduce: {
input: { $split: [{ $trim: { input: "$username" } }, " "] },
initialValue: "",
in: { $concat: ["$$value", "$$this"] }
}
}
}
}],
{ multi: true }
)

Playground


MongoDB 3.6 或更高版本:

  • 找到所有用户并循环forEach
  • replace 以应用模式来删除空格,您可以根据需要更新模式
  • updateOne 更新更新的用户名
db.users.find({ username: { $regex: " " } }, { username: 1 }).forEach(function(user) {
let username = user.username.replace(/\s/g, "");
db.users.updateOne({ _id: user._id }, { $set: { username: username } });
})

关于regex - 删除 MongoDB 集合中字符串字段值中的所有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67486907/

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