Рефакторинг кода для обновления вложенного документа, если он существует, или создания его, если он не использует mongodb mongoose - PullRequest
0 голосов
/ 27 октября 2018

В настоящее время у меня есть некоторый код, который я выполняю каждый раз, когда мне нужно обновить определенный ключ в вложенном документе, он в основном постоянно обновляет вложенный документ, который соответствует значению времени, и как только значение временного интервала переходит на него, создается новый вложенный документи продолжайте обновлять его до следующего приращения.

Мой вопрос заключается в том, могу ли я сделать это с помощью единственного обновления, связанного с тем, что я сейчас делаю с двумя.Первый проверяет, соответствует ли время вложенному документу «Не равно» времени, а второй проверяет, совпадает ли время «Это тоже равно», и они используют $ push, $ set соответствующим образом.

У меня естьпробовал так много разных комбинаций, это работает в настоящее время, но я хотел бы найти более краткий способ, если это возможно.

    TrendModel.updateOne(
      {league, rider, type, event, 'range.time': {$ne: time}},
      {...entry, $push: {'range': { $each: [range], $slice: -6}}},
      {upsert: true}
    ).catch(err => new Error(err.message)),

    TrendModel.updateOne(
      {league, rider, type, event, 'range.time': {$eq: time}},
      {...entry, $set: {'range.$': range}},
      {upsert: true}
    ).catch(err => new Error(err.message))
...