mongoose findByIdAndUpdate不修改模型而不返回错误

时间:2016-05-19 16:42:24

标签: node.js mongodb mongoose

我有一个名为Message的mongoose模型,当创建该模型时,我想将Message Id保存到另一个名为User的模型中的数组中。但是,当调用findByIdAndUpdate方法时,它不修改用户模型,也不返回错误消息。我已经检查过我使用了正确的用户ID,并且消息ID也有效。关于为什么mongoose这样做的任何想法?

Message.post('save', function addMessageToUser(doc) {
      User.findByIdAndUpdate(doc.userID, {
        $push: {
          messages: {
            $each: [doc._id],
            $sort: { createdAt: 1 },
            $slice: -1000,
          },
        },
      }, {
        new: true,
      }, (response, error) => {
        console.log(response);
        console.log(error);
      })
});

1 个答案:

答案 0 :(得分:1)

在mongo cli中尝试相同的命令后,我发现doc.userID没有被强制转换为ObjectId。相反,我在执行查询之前使用mongoose.Type.Object(doc.userID)将字符串强制转换为ObjectId。

Message.post('save', function addMessageToUser(doc) {
User.update({
    "_id": mongoose.Types.ObjectId(doc.userID),
  }, {
    $push: {
      messages: {
        $each: [doc._id],
        $sort: { createdAt: 1 },
        $slice: -1000,
      },
    },
  })
}