如何*不*保存mongoose文件?
我有一个mongoose字段X.我查询并更新其数据。
在某些情况下,它必须被复制,并且只有新的副本必须用新数据保存到数据库(原始数据必须与查询前保持一致)。
但不知何故,mongoose保存原始文件,即使我没有问一个.save()命令。
X.findById(req.params.id) .exec(function (err, original) { original.name = 'newName'; if(condition){ var copy = new X(original); copy.isNew = true; copy._id = mongoose.Types.ObjectId() X.collection.insert(copy, callback(){}) }else{ original.save(); }
有任何想法吗?
当你用一个现有的Mongoose对象作为参数运行一个构造函数时,Mongoose可能会做一些魔术。
首先,我会尝试运行没有_id的构造函数,而不是稍后改变它。 lodash示例:
const copy = new X(_.omit(original, ['_id']));
其次我会尝试明确传递只需要的领域:
const { field1, field3, field3 } = original; const copy = new X({ field1, field2, field3 });
或用lodash:
const copy = new X(_.pick(original, ['field1', 'field2', 'field3']));
如果一切都失败了,我会尝试序列化和反序列化为JSON,以确保所有的魔法都没有了:
const { field1, field3, field3 } = JSON.parse(JSON.stringify(original)); const copy = new X({ field1, field2, field3 });
要么:
const copy = new X(JSON.parse(JSON.stringify(_.pick(original, ['f1', 'f2'])));
确保在try / catch块中运行JSON操作来处理exception,或使用像tryjson
这样的模块。