【问题标题】:renaming a collection with mongoDB使用 mongoDB 重命名集合
【发布时间】:2015-04-01 13:58:48
【问题描述】:

我无法重命名 mongoDB 中的集合。我可以看到它存在并且可以从中写入和读取数据。我使用 node mongo 本机驱动程序尝试了以下操作。

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");吗?Manual
  • 是的,它和第一个解决方案一样,但我仍然尝试了两种语法
  • 我认为你需要rename method

标签: node.js mongodb


【解决方案1】:

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

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

【讨论】:

  • @wazzaday 对于它的价值,他们这样命名它是因为点链接语法已经将您置于集合的上下文中。用简单的英语阅读“collection.rename”更容易,但阅读“collection.renameCollection”更多余。他们试图以这种方式使 API 更直观。
【解决方案2】:

将此代码添加到您的 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);
     });
   });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2018-09-14
    相关资源
    最近更新 更多