Как заменить или вставить, если документ не найден в Mongodb?

#mongodb #mongoose

#mongodb #mongoose

Вопрос:

  address.update(
     
        {creator:req.userData.unique_SHOP},
        {$setOnInsert:PassAddress},
        
         {
          upsert:true,
         } 
       
    
    )
  

это мой запрос

  • address = схема
  • creator является ли ключ, который я пытаюсь сопоставить
  • passAddress содержит все элементы документов
  const PassAddress = new address({
    firstname:req.body.firstname,
    lastname:req.body.lastname,
    phone:req.body.phone,
    zip:req.body.zip,
    address1:req.body.address1,
    address2:req.body.address2,
    city:req.body.city,
    state:req.body.state,
    country:req.body.country,
    creator:req.userData.unique_SHOP
  });
     
  

любая помощь? я новичок в mongodb

Комментарии:

1. просто используйте $set вместо $setOnInsert .

2. нет @turivishal

Ответ №1:

Это сработает!

 const PassAddress = new address({
    firstname:req.body.firstname,
    lastname:req.body.lastname,
    phone:req.body.phone,
    zip:req.body.zip,
    address1:req.body.address1,
    address2:req.body.address2,
    city:req.body.city,
    state:req.body.state,
    country:req.body.country,
    creator:req.userData.unique_SHOP
  });

address.findOneAndUpdate(
    {creator:req.userData.unique_SHOP}, // find a document with that filter
    PassAddress, // document to insert when nothing was found
    {upsert: true, new: true}, // options
    function (err, doc) { // callback
        if (err) {
            // handle error
        } else {
            // handle document
        }
    }
);
  

Ссылка : https://silvantroxler.ch/2016/insert-or-update-with-mongodb-and-mongoose /

Ответ №2:

Если в passAddress есть все документы, которые вы хотите вставить для обновления, просто используйте простое обновление с полем upsert

 db.collection.update(<query>, <update>,{upsert: true)

//in your case
address.update(
        {creator:req.userData.unique_SHOP},
         passAddress,
         { 
           upsert:true,
         }            
    )
  

Комментарии:

1. спасибо, я знаю, что это правильно, но ответ @ radial сработал!