【问题标题】:Mongoose use float as keyMongoose 使用浮点数作为键
【发布时间】:2017-12-16 12:51:47
【问题描述】:

我正在尝试使用浮点数作为 mongodb 数据库中的键,因为我必须存储每个货币值的相应数量(例如 0.01:10)。但是当我尝试通过 mongoose(使用 express 的节点服务器)保存数据时,它只会使用数据库中的普通(字符串)键保存数据。

这是我的架构:

var ProtokollSchema = new Schema({
"date": String,
"0.01": {type: Number, default: 0},
"0.02": {type: Number, default: 0},
"0.05": {type: Number, default: 0},
"0.10": {type: Number, default: 0},
"0.20": {type: Number, default: 0},
"0.50": {type: Number, default: 0},
"1.00": {type: Number, default: 0},
"2.00": {type: Number, default: 0},
...

});

这是设置数据的快速函数:

    .post(function(req, res) {
    var protokoll = new ProtokollSchema();
    protokoll["date"] = req.body["date"];
    protokoll["0.01"] = req.body.data["0.01"];
    protokoll["0.02"] = req.body.data["0.02"];
    protokoll["0.05"] = req.body.data["0.05"];
    protokoll["0.10"] = req.body.data["0.10"];
    protokoll["0.20"] = req.body.data["0.20"];
    protokoll["0.50"] = req.body.data["0.50"];
    protokoll["1.00"] = req.body.data["1.00"];
    protokoll["2.00"] = req.body.data["2.00"];
    ...

    protokoll.save(function(err) {
        if (err) res.json(err);
        res.json({ message: "Comment successfully added!"});
    });
})

是否有解决方案,或者只是不可能做到?

【问题讨论】:

    标签: javascript mongodb mongoose floating-point mongoose-schema


    【解决方案1】:
    1. 模式中的所有键都必须是字符串,无论键字符串看起来像普通字符串、浮点数还是其他字符串。

    2. 确保 req.body.data 的值确实像 {"0.01": xxx, "0.02": xxx, ...};

    3. 您应该使用模型而不是架构来创建文档

      //wrong way
      var protokoll = new ProtokollSchema();
      
      //Right way - Use the schema to generate a model and use model to new a docuemnt.
      var Protokoll = mongoose.model('Protokoll', ProtokollSchema);
      var protokoll = new Protokoll({"0.01": xxx, "0.02": xxx, ...});
      

    【讨论】:

    【解决方案2】:

    实际的问题是 MongoDB 根本不支持其键中的点(请参阅this question) 最初我认为问题出在 mongoose 的 Schema 上,但显然不是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-13
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2015-12-04
      • 1970-01-01
      相关资源
      最近更新 更多