'How to implement transactional management in mongo with graphql?

I'm currently working on a movie database with graphql and mongodb. When a new review is added I want to push the review id immediately to the reviews array of movie entity. I understand that I have to use transactional management. I'm trying to do it like this, but I'm getting this error : throw new MongooseError('Callback must be a function, got ' + callback);

this is the mutation where I'm trying to implement it.

import Review from "../../db/models/ReviewModel.js";
import Movie from "../../db/models/MovieModel.js";
import mongoose from "mongoose";
const generateReviewModel = () => ({
  queries: {
    getAll: () => Review.find({}),
    getReviewByID: (id) => Review.findOne({ _id: id }),
    getAllHavingKey: (keys) =>
      Review.find({
        _id: { $in: keys.map((key) => mongoose.Types.ObjectId(key)) },
      }),
  },
  mutations: {
    addReview: (review) => {
      let session = null;
      Review.startSession()
        .then((_session) => {
          session = _session;
          return session.withTransaction(() => {
            return new Review(review).save(review, {
              session: session,
            });
          });
        })
        .then(() => session.endSession());
    },

    modifyReview: (body) => Review.findByIdAndUpdate(body.id, body.query),
    deleteReview: (id) => Review.findByIdAndDelete(id),
  },
});

export default generateReviewModel;



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source