我有一个包含用户名的现有MongoDB集合.用户名包含小写字母和大写字母.我想更新所有用户名,因此它们只包含小写字母.我试过这个脚本,但是没用
db.myCollection.find().forEach(
function(e) {
e.UserName = $toLower(e.UserName);
db.myCollection.save(e);
}
)
Run Code Online (Sandbox Code Playgroud)
斯科特,非常感谢任何关于让它工作的信息
Gat*_* VP 60
MongoDB没有$toLower作为命令的概念.解决方案是对数据运行一个大for循环并单独发布更新.
您可以在任何驱动程序或shell中执行此操作:
db.myCollection.find().forEach(
function(e) {
e.UserName = e.UserName.toLowerCase();
db.myCollection.save(e);
}
)
Run Code Online (Sandbox Code Playgroud)
您还可以使用原子更新替换保存:
db.myCollection.update({_id: e._id}, {$set: {UserName: e.UserName.toLowerCase() } })
Run Code Online (Sandbox Code Playgroud)
同样,您也可以从任何驱动程序执行此操作,代码将非常相似.
编辑:雷蒙提出了一个好点.该$toLower命令确实作为聚合框架的一部分存在,但这与更新无关.更新文档在这里.
Xav*_*hot 35
开始Mongo 4.2,db.collection.update()可以接受聚合管道,最后允许根据自己的值更新字段:
// { username: "Hello World" }
db.collection.update(
{},
[{ $set: { username: { $toLower: "$username" } } }],
{ multi: true }
)
// { username: "hello world" }
Run Code Online (Sandbox Code Playgroud)
第一部分{}是匹配查询,过滤要更新的文档(在本例中为所有文档)。
第二部分[{ $set: { username: { $toLower: "$username" } } }],是更新聚合管道(注意方括号表示使用聚合管道):
不要忘记{ multi: true },否则只会更新第一个匹配的文档。
| 归档时间: |
|
| 查看次数: |
19599 次 |
| 最近记录: |