How to store & retrieve Decimal128 values using Mongoose + Typescript

Viewed 160

I've already checked the other answers for this scenario on SO,but unfortunately non of them seem to be working for me.

I'm using the following dependencies:
Mongoose: ^5.11.97
Typescript: ^4.7.4

I have a transactions collection which holds the trxValue property whose values are in decimal format. I came across the new Decimal128 type introduced in Mongoose and I tried implementing the same in the following way:


// ITransaction.ts interface file
import { Types } from 'mongoose';

export default interface ITransaction {
  trxNo: string;
  trxType: 'Credit' | 'Debit';
  trxDate: Date;
  trxDesc: string;
  trxValue: string;
  cutomerId: Types.ObjectId;
  accountId: Types.ObjectId;
}
// Transactions.ts model file
import { model, Schema } from 'mongoose';
import ITransaction from '../interfaces/ITransaction';

const trxSchema = new Schema<ITransaction>({
  trxNo: { type: String, required: true },
  trxType: { type: String, required: true },
  trxDate: { type: Date, default: Date.now },
  trxDesc: { type: String, required: true },
  trxValue: {
    type: Schema.Types.Decimal128,
    required: true,
    get: (v: Schema.Types.Decimal128): string => (+v.toString()).toFixed(4),
  },
  cutomerId: { type: Schema.Types.ObjectId, required: true },
  accountId: { type: Schema.Types.ObjectId, required: true },
});

const Transaction = model<ITransaction>('Transaction', trxSchema);
export default Transaction;

The problem is the data types Decimal128 don't seem to match with typescript primitive data types. I keep getting the following warning at compile time. Can somebody please give me an detailed example on how to store and fetch decimal values in MongoDB using Mongoose + Typescript with precision of 4 digits after the decimal?

Type '{ type: typeof Schema.Types.Decimal128; required: true; get: (v: Schema.Types.Decimal128) => string; }' is not assignable to type 'SchemaDefinitionProperty<string> | undefined'.
  Types of property 'type' are incompatible.
    Type 'typeof Decimal128' is not assignable to type 'typeof Mixed | StringSchemaDefinition | undefined'.
      Type 'typeof Decimal128' is not assignable to type 'typeof Mixed'.
        Types of property 'schemaName' are incompatible.
          Type '"Decimal128"' is not assignable to type '"Mixed"'.ts(2322)
0 Answers
Related