За источником при этом следить не нужно, смотрю концепцию корзины, но описанный вариант не достаточен.
                  
                  
                  
                  
                  
                  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/
 Josh
                          Dies 🪄 /\p{Rich}+/
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Josh
                          Dies 🪄 /\p{Rich}+/
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  вот тут схемы
Обсуждают сегодня