NodeJS Mongoose和float值

hwamh0ep  于 2023-03-29  发布在  Node.js
关注(0)|答案(3)|浏览(107)

我的纬度数字正在转换为字符串(& 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);
        }
    });
};
tuwxkamq

tuwxkamq1#

虽然mongoDB完全支持float类型,但mongoose只支持Number类型,即整数。如果您尝试使用mongoose类型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);

希望有帮助。

wwodge7n

wwodge7n2#

从mongoose的当前版本(v5.12.6)开始,它支持Decimal128,可以用于此。

dsf9zpds

dsf9zpds3#

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Waypoint = new Schema({
    lat: {
        type: SchemaTypes.Double
    },
    lng: {
        type: SchemaTypes.Double
    },
    section: {
        type: Number
    }
 point: {
        type: [Number],
        index: '2d'
    },
}, {
    timestamps: true
})
event.index({
    Point: '2dsphere'
});
module.exports = mongoose.model('Waypoint', Waypoint);

waypoint.save(point: [parseFloat(values.latitude), parseFloat(values.longitude)],)

相关问题