Search code examples
databasemongodbrethinkdbrethinkdb-javascript

Get inserted document directly in RethinkDB


I have been starting with RethinkDB. I have gone through the documentation. I have a simple use case of returning the inserted document when a POST call is made. This is something I have done so far.

router.post('/user', jsonParser, async (req: Request, res: Response) => {
  const connection = await conn;

  const { name, email, employeeId } = req.body;
  // Email is primary key
  consumerTable.insert({
    name,
    email,
    employeeId,
  }).run(connection, (err: any, result: any) => {
    if (err) {
      throw err;
    } else {
      consumerTable.get(email).run(connection, (innerErr: any, userResult: any) => {
        if(innerErr) {
          throw innerErr;
        } else {
          res.send({
            data: {
              ...userResult
            },
            responseCode: 200,
          });
        }
      });
    }
  });
});

Is there any way to get the inserted object in the insert result itself. I read a lot of documentation, but didn't find anything useful.

Any help would be great. Cheers!


Solution

  • You may use the returnChanges option of the insert command as specified in the documentation. It should look like this:

    consumerTable.insert({
        name,
        email,
        employeeId,
    }, { returnChanges: true }).run(connection, async (err: any, cursor: any) => {
        const data = await cursor.toArray();
        // .error should be undefined, unless... an error happened!
        // not sure about the format though, console.log data to check it really is an array
        res.send({ data: data[0].new_val, error: data[0].error });
    });