i tried with below code
public async saveAndUpdateMaterial (req: Request, res: Response) {
const session = await mongoose.startSession()
await session.startTransaction({
readConcern: { level: 'snapshot' },
writeConcern: { w: 'majority' }
});
try {
// (async function() {
for await (var obj of req.body) {
var Material = new material(obj);
await material.find( { materialNo : Material.materialNo})
.then( plans => {
if(plans.length > 0)
{
material.findOneAndUpdate(
{ "_id": plans._id },
{ $set: { description: Material.description , modifiedOn : new Date()}
})
.session(session).
exec(function(err, post) {
console.log(err);
});
console.log("update");
}
else
{
material.create(Material, { session: session })
.then(plans => {
console.log(plans);
})
.catch(err => {
console.log("err"+err);
// console.log(err);
// res.status(400).send({error:err});
// res.status(500).send({
// message: err.message || "Some error occurred while retrieving notes."
// });
throw new Error("catch");
});
}
});
}
// })();
await console.log("commitTransaction");
await session.commitTransaction()
await session.endSession()
res.status(200).send({status:"success"});
} catch(err) {
console.log("catch");
await session.abortTransaction()
await session.endSession()
res.status(400).send({error:err});
}
}