我正在尝试使用浮点数作为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!"});
});
})
有解决方案还是不可能?
答案 0 :(得分:1)
架构中的所有键必须是字符串,无论键字符串看起来像普通字符串,浮点数还是其他字符串。
确保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, ...});
答案 1 :(得分:0)
实际问题是MongoDB根本不支持其键中的点(参见this question)最初我认为问题是猫鼬的模式,但显然它不是。