本文介绍了用猫鼬找到后如何更改子文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些类似下面的代码,使用猫鼬.
I have some code like below using mongoose.
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/hoge');
var UserSchema = new Schema({
name: String,
children: [ChildSchema],
});
var ChildSchema = new Schema({
name: String,
}, {_id: false});
var User = mongoose.model('User', UserSchema);
var Child = mongoose.model('Child', ChildSchema);
User.findOne({_id: '52299322fdbbdec515000001'}, function(err, user) {
console.log(user);
for (var i=0; i<user.children.length; i++) {
var child = user.children[i];
child.name = 'newchild';
}
user.save(function(err) {
console.log(user);
mongoose.disconnect();
});
});
这是我在mongodb中的记录.
And here is my record in mongodb.
{
"name" : "u1",
"_id" : ObjectId("52299322fdbbdec515000001"),
"children" : [ { "name" : "c2" } ],
"__v" : 0
}
我运行脚本时,其输出如下.
When I run the script, it outputs below.
{ name: 'u1',
_id: 52299322fdbbdec515000001,
__v: 0,
children: [ { name: 'c2' } ] }
{ name: 'u1',
_id: 52299322fdbbdec515000001,
__v: 0,
children: [ { name: 'newchild' } ] }
但是我在mongodb中的记录没有更改.为什么?
But my record in mongodb has not been changed. Why?
仅供参考,如果我在保存之前插入此代码,记录就会更改.
FYI, the record changed if I insert this code before saving.
user.children.push({name: 'somechild'});
推荐答案
对不起,我已经解决了自己.
Sorry, I've resolved myself.
问题在于声明模式的顺序.
The problem is the order of declarating Schemas.
如果我尝试此更改,它会起作用.
It worked if I tried this change.
/* first, children's schema */
var ChildSchema = new Schema({
name: String,
}, {_id: false});
/* seconds, parent's schema */
var UserSchema = new Schema({
name: String,
children: [ChildSchema],
});
这篇关于用猫鼬找到后如何更改子文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!