mongodb findOneAndUpdate с flatten $ set с позицией индекса не вставляется как массив

Я пишу общий код, который будет выполнять как добавление, так и обновление как атомарную операцию, поэтому использовал findOneAndUpdate. Мои данные сглаживания с массивом вставляются как объект вместо массива. Ниже приведены подробности.

db.test.findOneAndUpdate({"saleId" : "7d55acf0-5bc2-11e8-b3e5-c51df4c55083"},{$set:{"price.priceTier.0.unitSold": 1,}}, {upsert:true})
db.test.find()
{ "_id" : ObjectId("5b0173fbcd90c934727269ac"), "saleId" : "7d55acf0-5bc2-11e8-b3e5-c51df4c55083", "price" : { "priceTier" : { "0" : { "unitSold" : 1 } } } }

Как я могу убедиться, что {$set:{"price.priceTier.0.unitSold": 1,}} должен быть добавлен в виде массива, как показано ниже?

{ "_id" : ObjectId("5b0173fbcd90c934727269ac"), "saleId" : "7d55acf0-5bc2-11e8-b3e5-c51df4c55083", "price" : { "priceTier" : [{ "unitSold" : 1 } ]} }

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


person joy    schedule 20.05.2018    source источник
comment
Вам действительно нужно перезаписать все priceTier, по крайней мере, а может быть, даже price. Насколько это плохо? Суть в том, что нам сначала нужно $set как массив, прежде чем вы снова сможете начать работать с ним как с массивом. Но я хотел бы получить больше информации о фактическом объеме проблемы, а именно о том, есть ли на самом деле несколько записей, которые должны быть в массиве, а не такие, которые имеют просто индекс 0.   -  person Neil Lunn    schedule 21.05.2018
comment
Спасибо, я согласен с тем, что мне нужно использовать $set как массив, тогда только я могу использовать запрос на основе индекса. Поэтому в качестве альтернативы я использовал второй пункт, о котором вы упомянули, чтобы перезаписать все priceTier. Я использовал модуль mongo-flatten npm, чтобы сгладить мою полезную нагрузку. Это не меняет массив, поэтому я смог использовать findOneAndUpdate с upsert одним кодом.   -  person joy    schedule 21.05.2018