MongoDB обновить поле или отложить новый документ - PullRequest
1 голос
/ 11 апреля 2019

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

Вот где я застрял (product и shopId - переменные):

db.collection.updateOne(
  { "ref": product.ref, "sizesData.shop": shopId },
  { "$set": { "sizesData.$": { "$max": { "mostRecentPrice": product.price } } },
  { upsert: true }, },
)

Я пытаюсь обновить mostRecentPrice в поддокументе sizesData, если документ существует. Но я хочу создать совершенно новый документ, если документ не существует. Возможно ли это в одном запросе? Благодаря.

1 Ответ

1 голос
/ 11 апреля 2019

Вы не должны использовать позиционный оператор с upsert :

Не используйте позиционный оператор $ с операциями upsert, потому что вставки будут использовать $ как имя поля ввставленный документ.

, поэтому вам кажется, что вам нужно попасть в базу данных более одного раза

...