Partage
  • Partager sur Facebook
  • Partager sur Twitter

Upsert avec Mongoose (nodeJS)

    13 juin 2022 à 15:36:08

    Bonjour,

    J'essaie de me former sur nodeJS et je voulais essayer de faire un Upsert avec mongoose.

    Je souhaite insérer un nouveau document si aucun n'est trouvé avec une référence, sinon le mettre à jour. 

    Problème : si il s'agit de le mettre à jour je veux modifier uniquement certains champs, si c'est une création alors je veux insérer tous les champs.

    De cette manière sur MongoDB :

    db.products.updateOne(
      { _id: 1 },
      {
         $set: { item: "apple" },
         $setOnInsert: { defaultQty: 100 }
      },
      { upsert: true }
    )

    J'ai essayé avec Mongoose mais je n'y arrive pas :

    Example.findOneAndUpdate(
    	{ ref: row[0] },
    	{ $set: { 
    		p1: row[2]
    	} },
    	{ $setOnInsert: { 
    		ref: row[0],
    		p1: row[2],
    		p2: row[3],
    		p3: row[4]
    	} },
    	{ upsert: true },
    	function(err, res) {
    		if (err) {
    			return res.status(400).send({
    				message: errorHandler.getErrorMessage(err,req,res)
    			});
    		}
    	}
    );

    J'obtiens une erreur : MongooseError: Callback must be a function, got [object Object] car je pense que le $setOnInsert n'est pas reconnu et est considéré le callback. Ou peut-être ai-je tout simplement fait une erreur et je m'en excuse.


    Savez vous d'où le problème pourrait venir ?


    Merci,

    LS

    -
    Edité par LEL959 13 juin 2022 à 15:37:16

    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2022 à 18:00:07

      Salut,

      Tu as 5 paramètres alors que la fonction n'en accepte que 4 maximum d'après la documentation : https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate

      • Partager sur Facebook
      • Partager sur Twitter

      Upsert avec Mongoose (nodeJS)

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown