Расхождения при форматировании данных с использованием геттера в схеме Мангуста - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь округлить баланс схемы модели Account с помощью ключевого слова get при извлечении данных из MongoDB с помощью mongoose. Когда я проверяю значение баланса явно, используя accounts[0].balance, оно дает округленное число. Однако свойство баланса в объекте счетов по-прежнему показывает десятичное число. Я вставил результат вывода консоли ниже. Я хотел бы знать, почему существует расхождение в значениях, а также могу ли я исправить это, чтобы у возвращаемого мной объекта автоматически был округленный баланс.

    const Account = mongoose.model(
      "Balances",
      new mongoose.Schema({
        name: { type: String, required: true, minlength: 3, maxlength: 50 },
        balance: { type: Number, get: p => Math.round(p) }
      })
    );

    router.get("/", async (req, res) => {
      const accounts = await Account.find().sort("name");
      console.log("From accounts object: ", accounts);
      console.log("From balance propery: ", accounts[0].balance);
      res.send(accounts);
    });

`From accounts object:  [ 
   { _id: 5d27df2d9e553ec4d48ae7f6,
    name: 'savings',
    balance: 234.8 } 
]

С Баланс собственности: 235 `

1 Ответ

1 голос
/ 12 июля 2019

Вы должны включить функцию получения Mongoose с синтаксисом:

schema.set('toObject', { getters: true });
schema.set('toJSON', { getters: true });

В вашем случае код будет иметь вид:

const AccountSchema = new mongoose.Schema({
  name: { type: String, required: true, minlength: 3, maxlength: 50 },
  balance: { type: Number, get: p => Math.round(p) }
});

AccountSchema.set('toObject', { getters: true });
AccountSchema.set('toJSON', { getters: true });

const Account = mongoose.model(
  "Balances",
  AccountSchema,
);
...