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文件
(2) 改变顺序
选择要导出的集合与存放位置后,点击”下一步”
此处可自定义字段位置
(3) 导入
导入之前要打开刚才存储的JSON文件,也就是那个集合,删除掉最外面的{}和”RECORDES”:,否则MongoDB识别不出集合中的数据
在Navicat左边,选择该集合要导入的MongoDB数据库,对”集合”右键,选择MongoImport,选择要导入的集合JSON文件,勾选”导入JSON数组”
PS:MongoImport要借助官方的MongoDB小工具,可参考:Navicat导入、导出MongoDB的集合
至此成功
4、批量修改单个集合中的字段值
db.getCollection('集合名').find({
"字段名":"旧字段值"}).forEach(
function(item){
db.getCollection('集合名').update(
{
"_id":item._id},{$set:{
"字段名": "新字段值"}})
}
);