MongoDB 5.0修改集合名、集合的字段名、字段位置顺序,批量修改单个集合中的字段值

1、修改集合名

db.旧集合名.renameCollection("新集合名")

2、修改集合的字段名

updateMany表示更新Collection中的所有数据的字段

db.集合名.updateMany({}, {$rename : {"旧字段名" : "新字段名"}});

db.getCollection("集合名").update({}, {$rename : {"旧字段名" : "新字段名"}}, false, true)

(1) 第一个{}为查询条件,不需要的话空置即可
(2) 集合名、字段名要加""
(3) false代表{upsert:false},表示若要更新的userId字段不存在,也不插入userId
(4) true代表{multi:true},表示把按条件查询出来的记录全部更新

3、字段的位置顺序复原

以下方法有严重的缺陷:导出的结合中的数据类型会全部变为String类型,若使用该方法,则导出后的JSON数据建议手动修改其数据类型,如在对应的集合JSON文件中,原为id类型的,给它们添加"$oid",原为Integer类型的,给它们去掉双引号

解决上面提到的问题可参考:Notepad++ 正则表达式的使用

修改集合的字段名后,字段的位置可能会发生变化,如某字段的名称被修改成功后,可能会被安排到集合中的最后一列,原因MongoDB官方文档有给出:

MongoDB preserves the order of the document fields following write operations except for the following cases:
The _id field is always the first field in the document. 
Updates that include renaming of field names may result in the reordering of fields in the document. 

大致翻译为:

MongoDB保留写操作之后文档字段的顺序,但下列情况除外:
_id字段始终是文档中的第一个字段
对字段的更新可能会导致文档中字段的重新排序,这包括字段名的修改

"修复"借助的工具为Navicat,本质为导出集合,导出时修改顺序,再导入

(1) 导出
Navicat连接MongoDB,打开要修改字段位置顺序的集合,选择导出 – 全部记录 – JSON文件
MongoDB 5.0修改集合名、集合的字段名、字段位置顺序,批量修改单个集合中的字段值_第1张图片
(2) 改变顺序
选择要导出的集合与存放位置后,点击"下一步"
此处可自定义字段位置
MongoDB 5.0修改集合名、集合的字段名、字段位置顺序,批量修改单个集合中的字段值_第2张图片
(3) 导入
导入之前要打开刚才存储的JSON文件,也就是那个集合,删除掉最外面的{}和"RECORDES":,否则MongoDB识别不出集合中的数据
MongoDB 5.0修改集合名、集合的字段名、字段位置顺序,批量修改单个集合中的字段值_第3张图片
在Navicat左边,选择该集合要导入的MongoDB数据库,对"集合"右键,选择MongoImport,选择要导入的集合JSON文件,勾选"导入JSON数组"
MongoDB 5.0修改集合名、集合的字段名、字段位置顺序,批量修改单个集合中的字段值_第4张图片
PS:MongoImport要借助官方的MongoDB小工具,可参考:Navicat导入、导出MongoDB的集合

至此成功

4、批量修改单个集合中的字段值

db.getCollection('集合名').find({"字段名":"旧字段值"}).forEach(
   function(item){                
       db.getCollection('集合名').update(
			 {"_id":item._id},{$set:{"字段名": "新字段值"}})
   }
);

你可能感兴趣的:(mongodb)