猫鼬使用浮动作为关键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猫鼬使用浮动作为关键相关的知识,希望对你有一定的参考价值。
我正在尝试使用浮点数作为mongodb数据库中的键,因为我必须存储每个货币值的相应数量(例如0.01:10)。但是当我尝试通过mongoose(使用express的节点服务器)保存数据时,它只使用db中的普通(字符串)键保存数据。
这是我的架构:
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},
...
});
这是设置数据的express函数:
.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!"});
});
})
有解决方案还是不可能?
答案
- 无论密钥字符串看起来像普通字符串,浮点数还是其他字符串,模式中的所有键都必须是字符串。
- 确保req.body.data真的具有{“0.01”:xxx,“0.02”:xxx,...}等值;
- 您应该使用Model来创建文档而不是Schema
//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, ...});
另一答案
实际问题是MongoDB根本不支持其键中的点(参见this question)最初我认为问题是猫鼬的Schema,但显然不是。
以上是关于猫鼬使用浮动作为关键的主要内容,如果未能解决你的问题,请参考以下文章