我想做的事情应该是直截了当的,但由于某种原因,我在解决这个问题时遇到了真正的困难。我有以下Mongoose模式(简化)。
var Status = new Schema({
name : { type: String, required: true },
description : { type: String }
});
var Category = new Schema({
statuses : [Status], // contains a list of all available statuses
// some other attributes
});
var Book = new Schema({
statuses : [Status], // preferably this would not be an array but a single document, but Mongoose doesn't seem to support that
// some other attributes
});
现在,我想做以下事情:
以下是我目前正在做的事情:
mongoose.model('Category').findOne({_id: id}, function(err, category){
if(err) next(err);
var status = category.statuses.id(statusId); // statusId available via closure
book.statuses[0] = status; // book available via closure; trying to replace the existing status here.
book.save(function(err){
if(err) next(err);
next();
});
});
以上似乎运行良好,我没有任何错误。但是,新状态不会保存到文档中。下次我输出更新的Book文档时,它仍然具有旧状态。我调试了这个,find()方法以及设置状态似乎没问题。
我现在唯一能想到的是,我分配的状态值不正确,不能用Mongoose保存。虽然,我会期待某种错误信息。
或许还有更好的方法可以做到这一切吗?
答案 0 :(得分:0)
可能是因为您正在尝试复制嵌入式文档,该文档本身可能具有与之关联的ObjectId。尝试在Status
中保存重复的Book
会创建两个具有相同ObjectId
的嵌入式文档。尝试创建一个新的Status对象并复制字段。
很难在ObjectsId
s上找到嵌入式文档的文档,但这里提到了它们:http://mongoosejs.com/docs/embedded-documents.html。