Почему функция Save не работает внутри функции find

Я хочу получить последний вставленный _id в MongoDB, а затем вставить новый документ, который увеличил _id по сравнению с последним, и сохранить его. Я пишу этот код, он просто получает последний _id, но не сохраняет документ

Product.find({}, function(err , result)
    {
           if(!err)
           {
               result.forEach((p)=>{
                   count = p._id;
               });
               var product = new Product();
               product._id = count++;
               product.Name  = req.body.Name;
               product.Price = req.body.Price;
               product.Quantity = req.body.Quantity; 
               product.Imgsrc = req.body.Imgsrc;
               product.Cat_id = req.body.Cat_id;
               product.save((err, result)=>
               {
                    if(!err)
                    console.log(result);
               });
          }
     }

мой модуль

const mongoose = требовать ('mongoose');

var ProductSchema = new mongoose.Schema ({

_id : {type : Number } , 
Name : {type : String} , 
Price : {type :Number} ,
Quantity  : {type : Number} , 
Imgsrc : {type : String} , 
Cat_id :   { type: Number , ref : 'Categorys' } 

});

var product = mongoose.model ("Product", ProductSchema, "Product")

module.exports = product;

Всего 1 ответ


Я действительно думаю, что вы должны попробовать переписать этот кусок кода следующим образом:

Product.find({}, {sort: {_id: -1}, limit: 1}, function(err, result) {
    if(err) {
         console.log(err)
    }

    var count = result[0]._id;
    var product = new Product({
         product._id: ++count,
         ...req.body
    });

    product.save(err => console.log(err));
  });

Если я не ошибаюсь. Метод .save () не возвращает сохраненный документ, но даже если он это делает, ваш код не останавливается, если при сохранении возникают какие-либо ошибки, потому что вы предполагаете, что «! Err» сделает «ваши вещи». JavaScript не будет беспокоиться, если произойдет какая-либо ошибка, и вы ее не выбросите, поэтому вы должны зарегистрировать ее, чтобы увидеть, есть ли такая ошибка.


Есть идеи?

10000