Mongodb 如何使用Mongoose将嵌入的文档从一个文档放到另一个文档中?

Mongodb 如何使用Mongoose将嵌入的文档从一个文档放到另一个文档中?,mongodb,mongoose,express,Mongodb,Mongoose,Express,我想做的应该是直截了当的,但出于某种原因,我很难弄明白这一点。我有以下Mongoose模式(简化) 现在,我想做以下工作: 检索类别文档 查找特定的嵌入状态文档(基于请求参数) 将特定的嵌入状态文档分配给特定的图书文档。我想替换现有的图书状态,因为在任何给定时间,一本书只能设置一个状态 以下是我目前正在做的事情: mongoose.model('Category').findOne({_id: id}, function(err, category){ if(err) next(err)

我想做的应该是直截了当的,但出于某种原因,我很难弄明白这一点。我有以下Mongoose模式(简化)

现在,我想做以下工作:

  • 检索类别文档
  • 查找特定的嵌入状态文档(基于请求参数)
  • 将特定的嵌入状态文档分配给特定的图书文档。我想替换现有的图书状态,因为在任何给定时间,一本书只能设置一个状态
  • 以下是我目前正在做的事情:

    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();
        });
    });