Home > Software design >  Mongoose manipulate documents in pre('save) when its called from create()
Mongoose manipulate documents in pre('save) when its called from create()

Time:09-30

Hello guys I am trying to manipulate the documents that I am inserting to my collection with the create().Essentially I am calling a function that increments a letter field.

My pre hook is like

  baseAttribute.pre('save',async function(next){
    var att=this;
    const query=await mongoose.models.BaseAttributes.find({},{},{sort:{_id:-1}}).limit(1)
    console.log(query)
      if(query.length===0)
      {
        att.code="AA"
      }else{
        att.code= Codes.GetAlphaCode(query[0].code);
      }
      next()
  })

The result is that all the documents inserted by the create function are getting the same code

CodePudding user response:

I found a solution to the problem.

// asyncs because I am not sure if it will cause a conflict with my async functions
 
var asyncs = require("async");



asyncs.eachOfSeries(newArray,function (item, i, next){
          // console.log(item)
          console.log("In each async")
          // item.save(next);
          BaseAttribute.find({},{},{sort:{_id:-1}}).limit(1).then(result=>{
            console.log("In find")
           if(!result[0]){
             item.code="AA"
           }else{
             item.code=Codes.GetAlphaCode(result[0].code)
           }
            item.save(next);
          })
        }, function(err) {
          if (err) return console.log(err);
          res.json({done:"true"})
        });

This is the way save documents one by one (in a serial order).

  • Related