猫鼬和浮点值
Mongoose & float values
我的经纬度数字正在转换为字符串。我的整数部分仍然是 Number 的正确数据类型。如何设置模型,以便我可以将我的经纬度返回为 Float 而不是 String?
我正在我的数据库中存储 latLng 数据。现在我将我的数据类型设置为纬度和经度的数字。当我查看我的数据库时,我看到了这个:
{
"_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);
快递控制器:
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);
}
});
};
虽然 mongoDB 完全支持 float
类型,但 mongoose 仅支持 Number
类型,即整数。如果您尝试使用猫鼬类型 Number
保存为 mongoDB 浮点数,它将被转换为字符串。
要解决这个问题,您需要为猫鼬加载一些插件,以扩展其值类型。有一些插件最适合货币或日期,但在你的情况下我会使用 https://www.npmjs.com/package/mongoose-double。
更改后的模型如下所示:
var mongoose = require('mongoose')
require('mongoose-double')(mongoose);
var SchemaTypes = mongoose.Schema.Types;
var WaypointSchema = new Schema({
lat: {
type: SchemaTypes.Double
},
lng: {
type: SchemaTypes.Double
},
section: {
type: Number
}
created: {
type: Date,
default: Date.now
}
});
mongoose.model('Waypoint', WaypointSchema);
希望对您有所帮助。
var mongoose = require('mongoose');<br>
var Schema = mongoose.Schema;<br>
var Waypoint = new Schema({<br>
lat: {<br>
type: SchemaTypes.Double<br>
},<br>
lng: {<br>
type: SchemaTypes.Double<br>
},<br>
section: {<br>
type: Number<br>
}<br>
point: {<br>
type: [Number],<br>
index: '2d'<br>
},<br>
}, {<br>
timestamps: true<br>
})<br>
event.index({<br>
Point: '2dsphere'<br>
});<br>
module.exports = mongoose.model('Waypoint', Waypoint);<br>
waypoint.save(point: [parseFloat(values.latitude), parseFloat(values.longitude)],)
从当前版本的mongoose(v5.12.6)开始,它支持Decimal128,可用于此。
我的经纬度数字正在转换为字符串。我的整数部分仍然是 Number 的正确数据类型。如何设置模型,以便我可以将我的经纬度返回为 Float 而不是 String?
我正在我的数据库中存储 latLng 数据。现在我将我的数据类型设置为纬度和经度的数字。当我查看我的数据库时,我看到了这个:
{
"_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);
快递控制器:
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);
}
});
};
虽然 mongoDB 完全支持 float
类型,但 mongoose 仅支持 Number
类型,即整数。如果您尝试使用猫鼬类型 Number
保存为 mongoDB 浮点数,它将被转换为字符串。
要解决这个问题,您需要为猫鼬加载一些插件,以扩展其值类型。有一些插件最适合货币或日期,但在你的情况下我会使用 https://www.npmjs.com/package/mongoose-double。
更改后的模型如下所示:
var mongoose = require('mongoose')
require('mongoose-double')(mongoose);
var SchemaTypes = mongoose.Schema.Types;
var WaypointSchema = new Schema({
lat: {
type: SchemaTypes.Double
},
lng: {
type: SchemaTypes.Double
},
section: {
type: Number
}
created: {
type: Date,
default: Date.now
}
});
mongoose.model('Waypoint', WaypointSchema);
希望对您有所帮助。
var mongoose = require('mongoose');<br>
var Schema = mongoose.Schema;<br>
var Waypoint = new Schema({<br>
lat: {<br>
type: SchemaTypes.Double<br>
},<br>
lng: {<br>
type: SchemaTypes.Double<br>
},<br>
section: {<br>
type: Number<br>
}<br>
point: {<br>
type: [Number],<br>
index: '2d'<br>
},<br>
}, {<br>
timestamps: true<br>
})<br>
event.index({<br>
Point: '2dsphere'<br>
});<br>
module.exports = mongoose.model('Waypoint', Waypoint);<br>
waypoint.save(point: [parseFloat(values.latitude), parseFloat(values.longitude)],)
从当前版本的mongoose(v5.12.6)开始,它支持Decimal128,可用于此。