embedded式文件的mongoose更新

我正在慢慢发疯,试图了解如何在mongoose中更新embedded式文档的值,并编写了一些演示问题的node.js代码。

var mongoose = require('mongoose'); var Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/mongoose_broken'); var ASchema = new Schema({ value : { type: String, index: { unique: true } }, bs : [BSchema], }); var BSchema = new Schema({ value : { type: String }, }); var A = mongoose.model('A', ASchema); var B = mongoose.model('B', BSchema); // Add an entry of A, with 1 embedded B // var a = new A(); a.value = "hello"; var b = new B(); b.value = "world"; a.bs.push(b); a.save(function(err) { if (err) { console.log("Error occured during first save() " + err); return; } // Now update a by changing a value inside the embedded b // A.findOne({ value: 'hello' }, function(err, doc) { if (err) { console.log("Error occured during find() " + err); return; } doc.bs[0].value = "moon"; doc.save(function(err) { if (err) console.log("Error occuring during second save()"); // Check b was updated? // if (doc.bs[0].value != "moon") { console.log ("b was not updated! (first check)"); } else { console.log ("b looks like it was updated (first check)"); // Do a fresh find // A.findOne({value: "hello"}, function(err, doc_2) { if (err) { console.log("Error occured during second find() " + err); return; } if (doc_2.bs[0].value != "moon") { console.log ("b was not updated! (second check)"); } else { console.log ("b looks like it was updated (second check)"); } }); } }); }); }); 

运行这个的输出是:

 b looks like it was updated (first check) b was not updated! (second check) 

任何想法为什么没有保存embedded式文档的更新?

在父母中使用之前,您必须声明子模式。

 var BSchema = new Schema({ value : { type: String }, }); var ASchema = new Schema({ value : { type: String, index: { unique: true } }, bs : [BSchema], });