如何*不*保存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这样的模块。