вернуть идентификатор выдвинутого объекта nodejs мангуст - PullRequest
1 голос
/ 14 апреля 2020

У меня есть массив объектов (пакетов) внутри документа (продукты).
после добавления нового объекта в этот массив я хочу вернуть только автоматически созданный идентификатор добавленного объекта в топор ios пост-ответ , пожалуйста, как это сделать?

batchRoutes.route('/add/:id').post(function(req,res){
    Product.findOneAndUpdate(
        {"_id":req.params.id},
        {$push:{"batches":req.body}},

        function(err,batch){
            if(err){
                return res.json({'status':false});
            }
            else{
              return res.json({'status':true});
            }

        });
});

схема

let Product= new Schema({
    productName:{
        type:String
    },
    batches:[{    
            batchNo:{
                type:String
            },
            expDate:{
                type:Date
            },

    }]
},

1 Ответ

0 голосов
/ 14 апреля 2020

Вы можете получить доступ к обновленному документу, используя опцию {new: true}, а последний идентификатор в массиве пакетов документов - это недавно созданный идентификатор.

Итак, изменения:

1- ) добавить { new: true } параметр в качестве 3-го параметра

2-) получить последний сгенерированный идентификатор: const batchId = doc.batches[doc.batches.length - 1]._id;

batchRoutes.route("/add/:id").post(function (req, res) {
  Product.findOneAndUpdate(
    { _id: req.params.id },
    { $push: { batches: req.body } },
    { new: true },
    function (err, doc) {
      if (err) {
        return res.json({ status: false });
      } else {
        if (doc) {
          const batchId = doc.batches[doc.batches.length - 1]._id;
          return res.json({ status: true, batchId });
        } else {
          return res.status(404).json({ status: false });
        }
      }
    }
  );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...