猫鼬.update()什么都不做

时间:2020-02-25 04:01:00

标签: mongodb mongoose mongodb-query mongoose-schema

我正在找到一个名为Filter的文档(myFilter = Filter.findById(id))。我更新了一些字段,然后尝试使用myFilter.update()更新。 没发生什么事。 起作用的是

myFilter.New=false; 
myFilter.save()

这很好,但是会随机导致比赛情况。我使用的更新错误吗?

这是我的实现方式

    let myFilter = await Filter.findById(myUser.filterID);

    if (!_.isUndefined(distance)) {
      myFilter.searchParams.distance = distance;
    }

    if (!_.isUndefined(distanceMetric)) {
      myFilter.searchParams.distanceMetric = distanceMetric;
    }

    await myFilter.update();

4 个答案:

答案 0 :(得分:0)

基于Mongoose DocsModel.update()应该采用2个参数(filterdoc)。

但是,根据您的情况,我建议您直接使用myFilter.save()即可,而无需设置myFilter.New=false

答案 1 :(得分:0)

您没有正确使用.update()。您需要提供_id或文档的其他索引作为查询,然后提供要更新的数据。 .save()将是这里的方法。 您可以在这里https://docs.mongodb.com/manual/reference/method/db.collection.update/

查找更新

答案 2 :(得分:0)

我找到了另一个类似的问题。似乎要使用的方法是使用findOneandUpdate:/

但是我只想有条件地设置上面的某些字段。如果那不是要走的路,请告诉我。

这对我有用:

    await Filter.findByIdAndUpdate(myUser.filterID, {
      $set: {
        searchParams: {
          ...myFilter.searchParams
        }
      }
    });

答案 3 :(得分:0)

尝试此查询

let searchParams={}

 if (!_.isUndefined(distance)) {
  searchParams.distance = distance;
}

if (!_.isUndefined(distanceMetric)) {
  searchParams.distanceMetric = distanceMetric;
}

await Filter.update({_id: myUser.filterID},{$set:{searchParams}}