【发布时间】:2014-11-07 15:26:18
【问题描述】:
更新:
终于找到了。下面的代码是完全有效的。只是在另一个模块中对 Layouts.blocks 进行了破坏性更新...
这里发生了一些非常奇怪的事情。
这是Layouts 架构的相关部分
blocks: [{
full: {type: Boolean},
fields: [{type: String}]
}]
和.pre保存另一个模型的中间件代码
Map.pre('save', function(next){
var that = this;
var Layouts = connection.model('layouts');
var openFields = ['one', 'two'];
Layouts.find({_company: that._company, object: that._id, default: true}, function(err, layouts){
if (err) return next(err);
var layout = layouts[0];
console.log(layout.blocks);
layout.blocks.set(0, {full: false, fields: openFields});
layout.markModified('blocks');
console.log(layout.blocks);
layout.save(function(err){
console.log('saved: ', err);
next(err);
});
});
});
console.log 值是
[{ full: true, _id: 54147307f07097462fb93912, fields: [] }]
[{ full: false,
_id: 54147307f07097462fb93918,
fields: [ 'one', 'two' ] }]
saved: null
然后我检查保存的布局并得到:
blocks: [ { full: false, _id: 54147307f07097462fb93918, fields: [] } ],
所以,_id 和 full 已保存,但 fields 未保存!
如果我直接更新会发生类似的事情
Layouts.update({_company: that._company, object: that._id, default: true},
{$set: {'blocks.0.fields': openFields}},
function(err){
next(err);
});
有什么建议吗?
【问题讨论】:
标签: arrays string node.js mongodb mongoose