猫鼬和浮点值

Posted

技术标签:

【中文标题】猫鼬和浮点值【英文标题】:Mongoose & float values 【发布时间】:2016-02-07 01:33:51 【问题描述】:

我的 lat & lng 数字正在转换为字符串。我的部分整数仍然是 Number 的正确数据类型。如何设置模型,以便我可以将我的 lat & lng 恢复为 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);
        
    );
;

【问题讨论】:

您可以编辑您的问题以显示创建该输出的代码吗? 【参考方案1】:

虽然 mongoDB 完全支持 float 类型,但 mongoose 仅​​支持 Number 类型,它是整数。如果您尝试使用 Number 的猫鼬类型保存到 mongoDB 浮点数,它将被转换为字符串。

要解决这个问题,您需要为 mongoose 加载一些插件,该插件将扩展其值类型。有一些插件最适合货币或日期,但在你的情况下,我会使用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);

希望对你有帮助。

【讨论】:

对不起,但就我而言,如果我试图保存一个浮点值,那么它只会存储为 Float。【参考方案2】:
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)],)

【讨论】:

【参考方案3】:

mongoose当前版本(v5.12.6)支持Decimal128,可用于此。

【讨论】:

以上是关于猫鼬和浮点值的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬和独特的领域

猫鼬和 q 承诺

使用猫鼬和打字稿创建模式

使用猫鼬和打字稿创建模式

使用猫鼬和nestJS自动增加字段

text 安装快递,猫鼬和身体解析器