当前位置: 首页 > 面试题库 >

我应该如何用猫鼬存储价格?

赵光赫
2023-03-14
问题内容

我正在将node.js的猫鼬模式与express-validator(具有node-validator
santiziations和Validator)一起使用。

存储商品价格的好方法是什么?

我目前有

var ItemSchema = new Schema({
    name            : { type: String, required: true, trim: true }
    , price             : Number
});

价格是可选的,所以我有:

  if ( req.body.price ) {
    req.sanitize('price').toFloat();
    req.assert('price', 'Enter a price (number only)').isFloat();
  }

express-validator给了我isNumeric(允许0填充),isDecimal和isInt
…我宁愿只是将其转换为十进制并去除所有字符,所以我总是将42.00插入db中。

我要允许他们输入$ 42.00,$ 42、42、42.00和仅存储42.00。我该怎么做?并仍然验证我看到的是类似数字的内容,例如,如果他们输入“
abc”,我想使用req.assert将错误返回到表单。

另外,我认为货币最终将成为一个问题。

更新,我发现这篇文章说以美分存储价格为整数,所以4200
https://dba.stackexchange.com/questions/15729/storing-prices-in-sqlite-what-
data-type-to-use

当我调用item.price时,我只需要一种将4200转换为$ 42.00的方法,还需要清理并将输入转换为4200。


问题答案:

提示:
此处描述的方法基本上只是chovy的answer的另一种实现。

如果您在直接在模式中定义getter和setter时遇到麻烦,也可以使用该schema.path()函数来完成此工作:

var ItemSchema = new Schema({
  name: String,
  price: Number
});

// Getter
ItemSchema.path('price').get(function(num) {
  return (num / 100).toFixed(2);
});

// Setter
ItemSchema.path('price').set(function(num) {
  return num * 100;
});


 类似资料:
  • 问题内容: 我正在学习一些节点,并一直尝试使用猫鼬。目前,我的目标是学习如何使用populate。 我有一个定义,并要求: 然后我在某个时候执行此操作: 如何填充里程碑? 这是来自mongo 的数据: 这是基本上与项目相关的一个: 另外,这是里程碑模式: 问题答案: 您需要获得定义查询选项然后执行的顺序,并且可链接的API(例如mongoose Query)不知道在查询触发后您可能会调用哪些其他方

  • 问题内容: 我有以下架构(在咖啡脚本中表示歉意) 我只想恢复一条肯定在我的数据库中的记录: 不幸的是,这总是记录下来。在mongo shell中总是返回一个值。到底是怎么回事? 问题答案: 发现问题,需要改用:

  • 问题内容: 我想用Mongoose 生成一个MongoDB 。有没有办法从Mongoose 访问构造函数? 这个问题是关于从头开始 产生新的 。生成的ID是全新的通用唯一ID。 另一个问题是关于从 现有的字符串表示形式 创建一个。在这种情况下,您已经具有ID的字符串表示形式(它可能是通用的也可能不是唯一的),并且正在将其解析为。 问题答案: 您可以在找到构造函数。这是一个例子: 是一个新生成的。

  • 我在nodeJs服务器中使用mongoose(4.13.10)连接到mongodb实例 我使用游标来迭代我的数据库的记录,并对数据库进行多次查询,这需要很多时间,因此我得到游标未找到异常。我发现这些发生是由于游标的空闲超时,符合我的观察。 现在,我不想将标记为true,而是将超时设置为某个高值,通过该值,我确信长时间运行的查询将完成。但我无法找到任何留档或指导如何设置服务器参数。 如何设置此参数?

  • 我在一个在线订餐应用程序中使用Redux和React。 当用户从购物篮中删除一个商品时,我需要向服务器发出一个XHR请求,以计算购物篮的新总价。当这个XHR完成时,我更新redux存储并呈现新的价格。我使用Redux thunk来管理这个异步操作。 有一个问题是,用户连续快速地从购物篮中取出两件物品。用户删除第一项,我启动XHR以获得新价格。然后,用户单击一个按钮以删除第二个项目,并启动第二个XH