如何将sails.js的disk.db导入到mongodb中

3

我有一个使用sailsjs网络框架的Node.js应用程序。在开发过程中,我将适配器设置为sails-disk。来自disk.db的示例数据如下:

{
    "data": {
        "authentication": [
            {
                "user_id": 1,
                "username": "user1",
                "encrypted_password": "password here",
                "createdAt": "2014-05-12T07:40:24.901Z",
                "updatedAt": "2014-08-18T19:37:22.851Z",
                "id": 1,
                "email": "user1@email.com"
            }
        ],
        "user": [
            {
                "name": "user0001",
                "email": "user1@email.com",
                "role": [
                    "admin"
                ],
                "phone": [
                    {}
                ],
                "status": "Active",
                "createdAt": "2014-05-12T07:48:11.028Z",
                "updatedAt": "2014-05-24T08:12:41.646Z",
                "id": 1,
                "username": "user1"
            }
        ]
    }
}

这在我的本地机器上完美运行。 现在,我已经准备好将其部署到生产环境,并使用mongodb作为我的数据库。我已经设置好了所有的连接,可以成功连接到我的数据库。
我的问题是:是否有一种方法可以将我的本地磁盘数据库(disk.db)导入到mongodb中,同时保持我的json数据格式或集合?还是需要手动在mongodb上创建我的集合,并导入每个集合?

你是担心迁移实际数据记录,还是只是集合?MongoDB将在需要时为您创建集合,因此如果您只想发生这种情况,您不需要做任何事情。 - sgress454
是的 - 实际的数据记录。 - mr.b
3个回答

4

在Sails中没有工具或官方方法可以进行这种迁移。根据您有多少个模型以及编写脚本来为您迁移事物是否繁琐,一种选择是镜像您的模型 - 也就是说,如果您有一个 User.js ,那么创建一个新的模型 UserNew.js,看起来像这样:

module.exports = {

    connection: 'mongoDbConnection',
    tableName: 'user',
    attributes: <same as User.js attributes>

}

然后在你的config/bootstrap.js中执行以下操作:

User.find().exec(function(err, users) {
    UserNew.create(users).exec(...);
}

将它们转移过去。这是一个一次性的事情,之后您可以删除原始的文件,将重命名为。虽然有点hacky,但根据数据量的大小而定,这可能是最快的选项!

0

我在sgress454的答案基础上进行了改进,并将其反转。我创建了一个OldUserLocation.js模型,而不是NewUser。

module.exports = {
    connection: 'localDiskDb',
    tableName: 'user',
    attributes: {
    //same as in User.js
}

}

在默认模型中,我指定了MongoDB。

在引导函数中,我添加了以下内容:

User.find().exec(function(err, users){
    if(!err && users.length == 0){
        OldUserLocation.find().exec(function(err, oldUsers) {
            if(!err && oldUsers.length >0){
                User.create(oldUsers).exec(function (err){
                    cb();
                });
            }
            else{
                cb();
            }
        });
    }
    else{
        cb();  
    } 
});

简单来说,如果Mongo DB中的用户模型没有用户,则尝试从本地磁盘数据库导入。如果已经有用户,则假定导入已完成。

0

另一种我看到的hacky方法是:

  • 打开.tmp/localDiskDb.db
  • 复制一个对象
  • 使用Postman https://www.getpostman.com/apps 运行POST查询
  • 将查询设置为POST
  • 在“body”选项卡中设置端点URL,选择“raw”,“JSON”,并将对象粘贴到框中
  • 按发送按钮

重复以上步骤


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