Пн goose .update () ничего не делает - PullRequest
0 голосов
/ 25 февраля 2020

Я нахожу документ с именем 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 голосов
/ 25 февраля 2020

Попробуйте этот запрос

let searchParams={}

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

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

await Filter.update({_id: myUser.filterID},{$set:{searchParams}}
0 голосов
/ 25 февраля 2020

Вы неправильно используете .update (). Вам нужно дать _id или какой-либо другой индекс документа в качестве запроса, а затем данные, которые вы хотите обновить. .save () будет путь к go здесь. Вы можете посмотреть обновление здесь https://docs.mongodb.com/manual/reference/method/db.collection.update/

0 голосов
/ 25 февраля 2020

Я нашел другой вопрос, который был похож. Кажется, способ go - это использовать findOneandUpdate: /

Но я хочу только условно установить поля cetain, как указано выше. Если это не способ go, дайте мне знать, пожалуйста.

Это сработало для меня:

    await Filter.findByIdAndUpdate(myUser.filterID, {
      $set: {
        searchParams: {
          ...myFilter.searchParams
        }
      }
    });
0 голосов
/ 25 февраля 2020

На основе Пн goose Документы , Model.update() должны принимать 2 параметра (filter и doc).

Однако в вашем случае я предлагаю вам использовать myFilter.save() напрямую должно работать, без необходимости устанавливать myFilter.New=false

...