Поле с префиксом доллара ($) "$ Разделить" недопустимо для хранения

Я пытаюсь обновить поле seconds_until_start путем вычисления двух других полей. Похоже, это не работает в mongodb наиболее интуитивно понятным способом. Любые предложения о том, что еще я могу сделать, приветствуются.

db.price_scrape.update({"timestamp": {"$exists": true}},
  {"$set": {
      seconds_until_start: {$divide: [{$subtract: ["$marketstarttime", "$timestamp"]}, 1000]}
  }},
multi=true)

The dollar ($) prefixed field '$divide' in 'seconds_until_start.$divide' is not valid for storage.

$divide - оператор агрегации, вы не можете использовать его в update. См. В здесь варианты использования значений других полей в обновлении.
JohnnyHK 10.03.2018 02:31

он на самом деле не отвечает на вопрос в вашей ссылке, поскольку он составляет только новое поле из двух других, но без какого-либо оператора

Nickpick 10.03.2018 20:43

Короткий ответ: он не поддерживается напрямую, поэтому вам нужно использовать один из подходов, указанных в ссылке, в зависимости от вашей ситуации.

JohnnyHK 11.03.2018 01:20
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
3
2 761
1

Ответы 1

Проверьте свою версию mongo, если она не v4.2 +, ваш запрос не будет работать.

Как указал @JohnnyHK в комментарии (эта ссылка)

Отметьте первый ответ, который дает представление о том, как вы можете написать свой запрос в более ранних версиях в Mongo DB.

Другие вопросы по теме