Mongodb 如何使用Mongoose将嵌入的文档从一个文档放到另一个文档中?
我想做的应该是直截了当的,但出于某种原因,我很难弄明白这一点。我有以下Mongoose模式(简化) 现在,我想做以下工作:Mongodb 如何使用Mongoose将嵌入的文档从一个文档放到另一个文档中?,mongodb,mongoose,express,Mongodb,Mongoose,Express,我想做的应该是直截了当的,但出于某种原因,我很难弄明白这一点。我有以下Mongoose模式(简化) 现在,我想做以下工作: 检索类别文档 查找特定的嵌入状态文档(基于请求参数) 将特定的嵌入状态文档分配给特定的图书文档。我想替换现有的图书状态,因为在任何给定时间,一本书只能设置一个状态 以下是我目前正在做的事情: mongoose.model('Category').findOne({_id: id}, function(err, category){ if(err) next(err)
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一起保存。尽管如此,我还是希望收到某种错误消息
或者也许有更好的方法来完成这一切?这可能是因为您试图复制一个嵌入的文档,而该文档本身可能有一个与之关联的ObjectId。试图在
书籍
中保存重复的状态
,将创建两个具有相同ObjectId的嵌入文档。尝试创建新的状态对象并复制字段
在ObjectsId
s上很难找到嵌入文档的文档,但这里提到了它们:
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();
});
});