节点/ Mongoose:集合之间的同步查找/保存/删除:collection1.find(collection2.save(collection1.remove()))

时间:2017-01-24 05:01:30

标签: node.js mongodb

我有一个用户数据库,我想实现从一个集合(用户)中删除用户。但在删除该用户之前,我想将其保存到另一个备份/跟踪集合(DeletedUsers)。

所以序列应该是: 1)查找用户,2)将用户保存到DeletedUsers,3)从用户删除用户。

因为这需要同步,我已经嵌套了函数并通过回调排序。问题是保存到DeletedUsers不起作用。

Standalone,保存到DeletedUsers的工作正常,而不是当它嵌套在User.find()中时。

我为用户/已删除用户设置了两种不同的模式:

var User = mongoose.model('User', new Schema({data}));
var DeletedUser = mongoose.model('DeletedUser', new Schema({data}));

执行删除:

exports.postDeleteUser = function(req,res) {

    var conditions = { '_id': req.params.user_id };

    // Create the new deletedUser object to add to
    // the DeletedUsers collection 
    var deletedUser = new DeletedUser();

    User.findOne(conditions, function(err, user) {
        if (!user) {console.error(err);
        } else {
            // Copy over data to the new deletedUser object    
            for (prop in user) {deletedUser[prop] = user[prop];}

            // This is where I save the deletedUser to the
            // new collection.
            // ** This is not executing ** //
            deletedUser.save(function(err) {
                if (err) {
                    console.error(err);    
                    renderViewUser(user['_id'], 0, req, res);

                } else {

                    // However, this delete from Users *is* working
                    User.find(conditions).remove(function() {
                        res.redirect('/');

                    });
                };
            });
        };
    });
};

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

正如@RaR指出的那样,有一些隐藏属性可以保持新数据对象不会保存到新集合,而不仅仅是_id

复制所有属性不起作用:

for (prop in user) {deletedUser[prop] = user[prop];}

只有特定属性才有意复制:

var properties = ['prop1', 'prop2'....];

properties.forEach(function(i) {
    deletedUser[i] = user[i];
});