使用findOne()的Mongoose更新文档仅匹配错误的结果

时间:2017-10-09 21:04:04

标签: node.js mongodb express mongoose

我有一群fixtures属于'对竞争对手而言,看起来像这样:

{
    "_id": {
        "$oid": "59dbdf6dbe628df3a80419bc"
    },
    "timeOfEntrance": "1507581805813",
    "timeOfFinish": null,
    "competitor": {
        "$oid": "59db5a3f3d6119e69911a61a"
    },
    "__v": 0
}

我的目标是仅通过发送带有竞争对手ID的timeOfFinish请求作为身份网址和时间戳中的参数来更新文档PUT。但是,我很难撰写更新查询。

以下是我目前的情况,从未找到合适的匹配,令我惊讶的是总是更新错误的文档

fixtureController.put = (req, res) => {
  const competitorId = req.params.id;
  const timeOfFinish = req.body.timeOfFinish;

  Fixture.findOne({'competitor.$oid': competitorId}, (err, fixture) => {
    fixture.set({ timeOfFinish });

    fixture.save()
      .then(updatedFixture => {
        return res.status(200).json({
          success: true,
          fixture: updatedFixture
        })
      })
      .catch(err => {
        return res.status(500).json({
          message: err
        });
      });
  });
};

MongoDB领域的初学者,非常感谢您的评论和解决方案。

1 个答案:

答案 0 :(得分:0)

原来不需要在match参数中指定确切的字段。 Mongoose会自动匹配id字段。

bundle exec rake run_parallel