我想要做的应该是直截了当的,但由于某种原因,我很难弄清楚这一点。我有以下 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
});
现在,我想做以下事情:
- 检索类别文档
- 查找特定的嵌入状态文档(基于请求参数)
- 将特定的嵌入状态文档分配给特定的 Book 文档。我想替换现有的图书状态,因为在任何给定时间,应该只为一本书设置一个状态。
这是我目前正在做的事情:
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 保存的正确格式。虽然,我希望那时会出现某种错误消息。
或者也许有更好的方法来做这一切?