我有一个用户数据库,我想实现从一个集合(用户)中删除用户。但在删除该用户之前,我想将其保存到另一个备份/跟踪集合(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('/');
});
};
});
};
});
};
感谢您的帮助。
答案 0 :(得分:1)
正如@RaR指出的那样,有一些隐藏属性可以保持新数据对象不会保存到新集合,而不仅仅是_id
。
复制所有属性不起作用:
for (prop in user) {deletedUser[prop] = user[prop];}
只有特定属性才有意复制:
var properties = ['prop1', 'prop2'....];
properties.forEach(function(i) {
deletedUser[i] = user[i];
});