За источником при этом следить не нужно, смотрю концепцию корзины, но описанный вариант не достаточен.
UserSchema
userId: Number,
...
storage: [ItemSchema]
ItemSchema
type: String,
qty: Number
Сейчас делаю так
Попытка вставки
update(
{ userId, 'storage.type': { $ne: type } },
{ $push: { storage: { type, qty } } },
{ new: true }
)
При ошибке
update(
{ userId, 'storage.type': type },
{ $inc: { 'storage.$.qty': qty } },
{ new: true }
)
На атласе все. Смотрю в сторону $merge с 4.2 версии, может на воркер посадить все, что пушится.
а это не подходит? https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/ там вроде атомарная операция
https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/
вот тут схемы
Обсуждают сегодня