我想传递一个参数预先保存在猫鼬模型像中间件:猫鼬 - 参数传递到预先保存 - 在更新不工作保存
subject.save({ user: 'foo', correlationId: 'j3nd75hf...' }, function (err, subject, count) {
...
});
它被传递到两个预先保存中间件
第一:
schema.pre('save', function (next) {
// do stuff to model
if (arguments.length > 1)
next.apply(this, Array.prototype.slice.call(arguments, 1));
else
next();
});
然后:
schema.pre('save', function(next, metadata, callback) {
// ...
// create history doc with metadata
// ...
history.save(function(err, doc) {
if(err) throw err;
if (typeof metadata == 'object')
next(callback);
else
next();
});
});
它不能保存从db中获取的现有模型,但它在新创建的模型上工作。
它确实工作,如果我删除参数。
所以,如果我叫......
subject.save(function (err, subject, count) {
...
});
...它的工作。
看起来回调从来没有真正的回调。所以也许它假设第一个参数是save()更新的回调。
对于创造,它与传递参数
(new models.Subject(subjectInfo)).save({ user: user, correlation_id: correlationId }, function (err, subject, count) {
if (err) throw err;
...
});
为什么它为保存()上创建的任何工作思路,但不保存()上更新?
谢谢!
这只适用于Model.update,findByIdAndUpdate,findOneAndUpdate,findOneAndRemove,findByIdAndRemove。我打电话save()。它也可以工作,调用所有中间件,当传递的参数被删除时 –
嗯......我明白你现在要问什么。你可以分享你的代码的“创建”部分吗?根据猫鼬的说法,建议的意思是保存,创建和更新的想法都有不同的含义。当你说“更新”时,大多数人会想到MongoDB的本地更新命令。这是我的困惑的根源 – srquinn
叶普,我只是在精神上把它分解为一个CRUD操作。我假设当一个模型/文档不是新的(!isNew)时,它确实使用了mongodb update()调用,但是使用save()使用了钩子。对于创建vs更新,save()上的钩子可能连接不同吗? –