Я хочу получить последний вставленный _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 не будет беспокоиться, если произойдет какая-либо ошибка, и вы ее не выбросите, поэтому вы должны зарегистрировать ее, чтобы увидеть, есть ли такая ошибка.