gpt4 book ai didi

javascript - 在第二次保存操作中未调用子文档的 Mongoose 预保存中间件

转载 作者:IT老高 更新时间:2023-10-28 13:25:37 26 4
gpt4 key购买 nike

我有一个带有子文档的 Mongoose 模式。父模式和子模式都有预保存 Hook 。例如:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var SubSchema = new Schema( { x : Number } );
SubSchema.pre('save', function (next) {
console.log("pre save Sub");
next();
});

var MainSchema = new Schema( { x : Number, children : [SubSchema] } );
MainSchema.pre('save', function (next) {
console.log("pre save Main");
next();
});
var Main = mongoose.model('Main', MainSchema);

var m = new Main();
m.children.push( { x : 42 } );

m.save( function(err, doc) {
console.log(doc +"\n\n");
doc.children[0].x = 43;

doc.save( function(err, doc2) {
console.log(doc2 + "\n\n");
});
});

当我运行这段代码时,我得到以下输出:

pre save Sub
pre save Main
{ __v: 0,
_id: 50660b319aec895a50000002,
children: [ { x: 42, _id: 50660b319aec895a50000003 } ] }


pre save Main
{ __v: 0,
_id: 50660b319aec895a50000002,
children: [ { x: 43, _id: 50660b319aec895a50000003 } ] }

为什么在第二次保存操作中没有为子文档运行预保存 Hook ?

最佳答案

这在 v3.2.0 中已修复,允许您执行以下操作:

doc.children.set(0, {x: 43})
doc.save()

关于javascript - 在第二次保存操作中未调用子文档的 Mongoose 预保存中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com