使用mongoDB重命名集合

7

我无法在mongoDB中重命名集合。我可以看到它的存在,并且可以读写其中的数据。我已经尝试过使用Node.js MongoDB原生驱动程序进行以下操作:

db.collection("mycollection").renameCollection("mynewcollection");

error: TypeError: Object #<Collection> has no method 'renameCollection'

并且

db['mycollection'].renameCollection("mynewcollection");

Cannot call method 'renameCollection' of undefined

在同一位置执行以下操作将按预期返回所有文档。
db.collection("mycollection").find({}).toArray(function(err, docs){
    console.log(docs);
});

你尝试过 db.mycollection.renameCollection("mynewcollection"); 吗?手册 - chridam
是的,这与第一个解决方案相同,但我仍然尝试了两种语法。 - wazzaday
我认为你需要使用rename方法 - chridam
2个回答

21

使用 node.js 驱动程序重命名集合的方法是rename,而不是renameCollection

db.collection("mycollection").rename("mynewcollection", function(err, newColl) {...});

2
@wazzaday 说实话,他们这样命名是因为点链接语法已经将您置于集合的上下文中。用简单的英语来阅读“collection.rename”更容易,但用“collection.renameCollection”来阅读则更冗余。他们试图通过这种方式使API更加直观。 - Chev

0
请将以下代码添加到您的collection.js中(应该添加在第153行或collection.js代码的末尾),它应该解决问题。
req.collection.rename(name, function(err, collection) {
     if (err) {
-      req.session.error('Something went wrong: ' + err);
+      req.session.error = 'Something went wrong: ' + err;
       console.error(err);
       return res.redirect('back');
     }

     req.updateCollections(req.db, req.dbName, function(err) {
       if (err) {
-        req.session.error('Something went wrong: ' + err);
+        req.session.error = 'Something went wrong: ' + err;
         return res.redirect('back');
       }

-      req.session.success('Collection renamed!');
+      req.session.success = 'Collection renamed!';
       res.redirect(config.site.baseUrl+'db/' + req.dbName + '/' + name);
     });
   });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接