猫鼬findOneAndUpdate Post Hook不返回文档

时间:2019-08-05 06:34:54

标签: javascript node.js mongodb mongoose

摘要

我试图在Mongoose的findOneAndUpdate钩子中返回更新的文档。我知道它的行为,通常不会返回更新的文档,但是我正在通过findOneAndUpdate传递{new:true}。

错误

我得到的错误是我的帖子挂钩中的文档未定义。它是为“有效的代码”定义的,但是当我使用想要的实际findOneAndUpdate操作时,doc变得不确定。我认为这是因为我正在尝试更新文档中的嵌套对象,但我仍然需要能够更新嵌套对象并以某种方式使用后钩子

猫鼬模型

const apiTestArray = {
  apiName: { type: String, require: false },
  startStats: {
    seasonStats: { type: Object, require: false },
    lifeStats: { type: Object, require: false }
  },
  endingStats: {
    seasonStats: { type: Object, require: false },
    lifeStats: { type: Object, require: false }
  },
  startTime: { type: Date, require: false },
  endTime: { type: Date, require: true },
  completed: { type: Boolean, require: false }
};

const apiTestSchema = mongoose.Schema({
  apiTests: [apiTestArray],
  completed: { type: Boolean, require: true, default: false }
});

有效的代码

const findOneAndUpdate = await ApiTest.findOneAndUpdate(
      { _id: inProgressTest._id },
      {
        $set: { completed: true } 
      },
      { new: true }
    );

apiTestSchema.post("findOneAndUpdate", async function(doc, next) {
  console.log("post hook ran");
  // console.log("this", this);
  console.log("apiTest", doc);
  doc.completed = doc.apiTests.some(apiTest => apiTest.completed);
  // doc.save().then(next());
});

无效的所需代码

const findOneAndUpdate = await ApiTest.findOneAndUpdate(
      { _id: inProgressTest._id, "apiTests.$.apiName": scoutVersion },
      {
        $set: {
          "apiTests.$.completed": true,
          "apiTests.$.endingStats": newStats,
          "apiTests.$.endTime": endTime
        }
      },
      { new: true }
    );

apiTestSchema.post("findOneAndUpdate", async function(doc, next) {
  doc.completed = doc.apiTests.some(apiTest => apiTest.completed);
  // doc.save().then(next());
});

0 个答案:

没有答案