如何在Rest上转换Decimal128值

时间:2018-07-11 11:38:14

标签: node.js mongodb mongoose mongoose-schema restify

我将Mongoose用作软件包的一部分,节省了大量时间。

我正在使用的软件包为https://github.com/florianholzapfel/express-restify-mongoose。当我查询Mongodb,并且我有一个Decimal128类型时,它将返回如下值:

{
    "sku": "shGHYB12-60-LOZ",
    "name": "Prd",
    "size": "60",
    "buyPrice": {
        "$numberDecimal": "12.55"
    }
}

当它在Mongoose对象中时,哪个还可以,但是当我在Rest API上公开它时(此包使用restify),它只是一个json表示形式。

如果我在Patch或Put请求中通过REST Api将其重新发布-就像字符串或数字(请参见下文)一样,它可以正常工作并将其存储在数据库中,并使用Mongoose模型正确翻译。

{
    "sku": "shGHYB12-60-LOZ",
    "name": "Prd",
    "size": "60",
    "buyPrice": "12.5995"
}

猫鼬模型的一部分就是这样

"buyPrice": {
    "type": "Decimal"
}

如何将其存储为MongoDb中的十进制类型,但在REST上将其公开为数字?我只是不确定如何去做。

我猜可能发生的3个领域是

  1. 猫鼬模型
  2. 重新整理
  3. 猫鼬中的某种“钩子”。

我都不是太熟悉。感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:0)

在声明架构之前,先创建一个辅助函数:

function getMoney(value) {
  return parseFloat(value.toString());
}

像这样在您的字段中添加吸气剂:

price: {
      type: Schema.Types.Decimal128,
      get: getMoney
    },

答案 1 :(得分:0)

以下作品:

function getFloat(value) {
  return value && value['$numberDecimal'] ? value['$numberDecimal'] : 0;
}

用法示例:

getFloat(obj1.buyPrice)