Search code examples
javascriptmongodbmongoosemongoose-schema

How to concat string and need to pass in updateOne in mongoose


I need to update the status so in this code, I have hardcode the key name { user_status_is_active: isActivate },. but I have to pass it dynamically. i tried like {${this.entityName}_status_is_active: isActivate } but it doesn't work. Can anyone tell me how to achieve it?

// dynamic value comes from schema constant
this.entityName

 updateStatus = async (request: Request, response: Response, isActivate: boolean) => {
    try {
      const dbResponse = await this.model.updateOne(
        { _id: request.params.id },
        { user_status_is_active: isActivate },
        { runValidators: true },
      );
      if ('nModified' in dbResponse && dbResponse.nModified! < 1) {
        response.send(`${this.entityName} not modified.`);
      } else {
        response.send(`${this.entityName} ${isActivate ? 'activated' : 'deactivated'} successfully.`);
      }
    } catch (err) {
      response.send(err.message);
    }
  };

Solution

  • You can use Computed property name to do it. Something like:

    const dbResponse = await this.model.updateOne(
        { _id: request.params.id },
        { [`${this.entityName}_status_is_active`]: isActivate },
        { runValidators: true },
    );