Mongoid 5: find_one_and_update с returnNewDocument
Возможно ли, что Mongoid v5.1.2 игнорирует returnNewDocument
опция при использовании с find_one_and_update
?
Рассмотрим следующий код:
next_number = TrackingId.where(id: id).find_one_and_update({
:$inc => {
auto_increment_counter: 1
}
},
upsert: true,
returnNewDocument: true
).auto_increment_counter
где auto_increment_counter
целое число field :auto_increment_counter, type: Integer, default: 0
в этом классе.
Однако, когда документ не найден, он создает его, но не возвращает вновь созданный документ. Итак, я получаю nil
обратно из find_one_and_update
и это ломается.
1 ответ
Я подозреваю, что реализация mongoid find_one_and_update изменит флаг returnNewDocument на return_new_document или $ returnNewDocument. Позже я посмотрю на кодовую базу mongoid и подтвердю.
Обновление: Итак, я поиграл в pry и посмотрел код. Позже я смог подтвердить это и в документах. Опция, которую вы ищете, это return_document, для которого вы устанавливаете либо: before, либо:after (см. Документы: http://www.rubydoc.info/github/mongoid/mongoid/Mongoid%2FContextual%2FMongo%3Afind_one_and_update)
Поэтому ваш запрос должен быть:
next_number = TrackingId.where(id: id).find_one_and_update({
:$inc => {
auto_increment_counter: 1
}
},
upsert: true,
return_document: :after
).auto_increment_counter