我的纬度数字正在转换为字符串(& lng)。我的部分整数仍然是正确的Number数据类型。如何设置模型以便将纬度数据恢复为Float而不是String(& lng)?
我在我的数据库中存储latLng数据。现在我的数据类型设置为Number for lat & lng。当我检查我的数据库时,我看到以下内容:
{
"_id" : ObjectId("563bd98a105249f325bb8a7e"),
"lat" : 41.8126189999999980,
"lng" : -87.8187850000000054,
"created" : ISODate("2015-11-05T22:34:50.511Z"),
"__v" : 0,
"section" : 0,
}
但是当我使用express取回数据时,我得到了这个:
{
"_id": "563bd98a105249f325bb8a7e",
"lat" : "41.8126189999999980",
"lng" : "-87.8187850000000054",
"__v": 0,
"section" : 0,
"created" : "2015-11-05T22:34:50.511Z",
}
我的模特:
var WaypointSchema = new Schema({
lat: {
type: Number
},
lng: {
type: Number
},
section: {
type: Number
}
created: {
type: Date,
default: Date.now
}
});
mongoose.model('Waypoint', WaypointSchema);
Express控制器:
exports.list = function(req, res) {
Waypoint.find().sort('-created').populate('user', 'displayName').exec(function(err, waypoints) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(waypoints);
}
});
};
3条答案
按热度按时间tuwxkamq1#
虽然mongoDB完全支持
float
类型,但mongoose只支持Number
类型,即整数。如果您尝试使用mongoose类型Number
保存到mongoDB浮点数,则会将其转换为字符串。为了解决这个问题,你需要加载一些mongoose的插件来扩展它的值类型。有一些插件最适合货币或日期,但在你的情况下,我会使用https://www.npmjs.com/package/mongoose-double。
修改后的模型看起来像这样:
希望有帮助。
wwodge7n2#
从mongoose的当前版本(v5.12.6)开始,它支持Decimal128,可以用于此。
dsf9zpds3#