在猫鼬模式中使用getter格式化数据时的差异

时间:2019-07-12 02:52:43

标签: javascript mongodb mongoose getter

我正在尝试使用Account关键字舍入get模型架构的平衡,同时使用猫鼬从MongoDB检索数据。 当我使用accounts[0].balance明确检查余额的值时,它确实给出了四舍五入的数字。 但是,accounts对象中的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 个答案:

答案 0 :(得分:1)

您必须使用以下语法启用猫鼬吸气功能:

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,
);