var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
//var url = 'mongodb://localhost:27017/myproject';
var url = 'mongodb://myuser:mypwd@myserver.cloud.com:portNumber/databasename';
// Use connect method to connect to the server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected successfully to server");
renameDBColumn(db, function() {
db.close();
});
});
//
// This function should be used for renaming a field for all documents
//
var renameDBColumn = function(db, callback) {
// Get the documents collection
console.log("renaming database column of table documents");
//use the former way:
remap = function (x) {
if (x.oldColumnName){
db.collection('documents').update({_id:x._id}, {$set:{"newColumnName":x.oldColumnName}, $unset:{"oldColumnName":1}});
}
}
db.collection('documents').find().forEach(remap);
console.log("db table documents remap successfully!");
}
7条答案
按热度按时间sxissh061#
您可以使用:
或者只更新包含属性的文档:
上述方法中的
false, true
为:{ upsert:false, multi:true }
。您需要multi:true
来更新所有记录。或者可以用前一种方式:
其一般语法为
https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
lymgl2op2#
您可以使用$rename字段更新运算符:
k10s72fa3#
如果你需要对蒙哥做同样的事情:
monogoid 4.0.0
中的语法有变化:qncylg1j4#
任何人都可能使用此命令重命名集合中的字段(不使用any_id):
参见FYI
5vf7fwbs5#
我正在使用Mongo 3.4.0
$rename运算符用于更新字段的名称,格式如下:
例如
新字段名称必须与现有字段名称不同。若要在嵌入文档中指定,请使用点标记法。
此操作将集合中所有文档的字段nmae重命名为name:
在上述方法中,false、true分别为:{ upsert:false,multi:true }。要更新所有记录,您需要multi:true。
重命名嵌入文档中的域
使用链接:https://docs.mongodb.com/manual/reference/operator/update/rename/
h43kikqp6#
这个nodejs代码就是这样做的,正如@Felix Yan提到的,以前的方式似乎工作得很好,我对其他代码片段有一些问题,希望这能有所帮助。
这将把表“documents”的列“oldColumnName”重命名为“newColumnName”
c8ib6hqw7#
如果您正在使用MongoMapper,这将起作用: