2016-02-02 4 views
1

Как использовать renameCollection с помощью Meteor? Я хотел бы сделать это внутри Meteor, потому что мне нужно делать миграции для среды разработки и производства.renameCollection with Meteor

+0

You может использовать драйвер Node.js MongoDB, но я предполагаю, что будут побочные эффекты при использовании на запущенном сервере Meteor (с хвостовиком и реактивностью OpLog). Что вы пытаетесь достичь? – MasterAM

+1

Возможный дубликат [Как переименовать коллекцию в метеор?] (Http://stackoverflow.com/questions/29070599/how-to-rename-a-collection-in-meteor) –

ответ

0

Используйте RemoteCollectionDriver для доступа к собственному драйверу mongo и командам администратора экземпляра, включая команду renameCollection.

Следующий пример переименовывает коллекцию с именем заказов в базе данных test к orders2016 в базе данных test:

var mongoDriver = MongoInternals.defaultRemoteCollectionDriver(), // or Meteor._RemoteCollectionDriver 
    db = mongoDriver.mongo.db; 

// for commands not natively supported by the driver - https://docs.mongodb.org/manual/reference/command/ 
db.command({ renameCollection: "test.orders", to: "test.orders2016" }, function(error, result) { 
    if (error) throw error; 
    if (result.errmsg) { 
     console.error('Error calling native renameCollection command:', result.errmsg); 
    } 
    else { 
     console.log(result); 
    } 
}); 

Для реализации этой стороны сервера, вы могли бы следовать этой асинхронной схеме:

var shell = function() { 
    var Future = Npm.require('fibers/future'), 
     future = new Future(), 
     db = MongoInternals.defaultRemoteCollectionDriver().mongo.db; 

    db.command({ renameCollection: "test.orders", to: "test.orders2016" }, 
     function(error, result) { 
      if (err) throw new Meteor.Error(500, "failed"); 
      future.return(result); 
     } 
    ); 
    return future.wait(); 
};