部分修复mongo数据库

时间:2018-03-13 10:03:12

标签: mongodb mongoose

我的用户中有一个mongodb。用户就是这样:

_id: ObjectId,
created_at: Date,
username: String

我不知道为什么,但我的所有用户created_at字段都已重置。 我有一个保存,但我不能使用我的保存并通过保存替换所有用户,因为我总是有新用户。我只需要在保存中用自己的created_at字段替换所有现有用户created_at字段。

我可以使用mongoose和node.js来做到这一点(我不知道怎么做但我能找到)但是我宁愿只使用mongodb函数来做到这一点。我的保存时间为.bson格式。

1 个答案:

答案 0 :(得分:0)

您可以创建一个本地数据库,将.bson放入其中。然后向本地数据库发出请求以获取所有用户并将主题保存在.json文件中。然后使用保存的数据更新错误日期的用户。

在数据库中输入您的bson文件

mongorestore -d yourdatabase -c yourcollection "users.bson"

在json文件中设置所有好用户

db.model('User').find({}, { created_at: 1 }).exec(function(error, _users) {
    jsonUsers = _users;
    jsonUsers = JSON.stringify(jsonUsers);
    fs.writeFile('myjsonfile.json', jsonUsers, 'utf8', (err) => {

    });
});

更新错误的用户以恢复良好

const jsonUsers = require('../myjsonfile.json');

db.model('User').find({}, { created_at: 1 }).exec(function(error, _users) {
    if (error) return ;
    _users.forEach((wrongUser) => {
        let goodUser = jsonUsers.find((gU) => { return gU._id == wrongUser._id });
        if (goodUser) {
            wrongUser.created_at = goodUser.created_at;
            wrongUser.save(cb);
        } else {
            //this is on of your new user that where not in your .bson file
        }
    });
});