2013-09-06 3 views
1

У меня есть код, как показано ниже, с помощью мангуста.Как изменить вспомогательный документ после поиска с помощью 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.

{ 
    "name" : "u1", 
    "_id" : ObjectId("52299322fdbbdec515000001"), 
    "children" : [ { "name" : "c2" } ], 
    "__v" : 0 
} 

Когда я запускаю сценарий, он выводит ниже.

{ name: 'u1', 
    _id: 52299322fdbbdec515000001, 
    __v: 0, 
    children: [ { name: 'c2' } ] } 

{ name: 'u1', 
    _id: 52299322fdbbdec515000001, 
    __v: 0, 
    children: [ { name: 'newchild' } ] } 

Но моя запись в mongodb не была изменена. Зачем?

FYI, запись изменилась, если я вставляю этот код перед сохранением.

user.children.push({name: 'somechild'}); 

ответ

0

Извините, я решил.

Проблема заключается в порядке декларирования схем.

Это сработало, если я попробовал это изменение.

/* first, children's schema */ 
var ChildSchema = new Schema({ 
    name: String, 
}, {_id: false}); 

/* seconds, parent's schema */ 
var UserSchema = new Schema({ 
    name: String, 
    children: [ChildSchema], 
}); 
Смежные вопросы