2015-11-06 98 views
4

我的纬度& lng数字正在转换为字符串。我的部分整数仍然是Number的正确数据类型。如何设置模型,以便我可以将我的经纬度作为Float而不是String?猫鼬和浮点值

我正在LatLng数据存储在我的分贝。现在我的数据类型设置为数字lat & lng。当我检查出我的分贝我看到这一点:

{ 
    "_id" : ObjectId("563bd98a105249f325bb8a7e"), 
    "lat" : 41.8126189999999980, 
    "lng" : -87.8187850000000054, 
    "created" : ISODate("2015-11-05T22:34:50.511Z"), 
    "__v" : 0, 
    "section" : 0, 
} 

但是,当我把我的数据备份出来用快递,我得到这样的:

{ 
    "_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

你能编辑你的问题来显示创建该输出的代码吗? – JohnnyHK

回答

5

当mongoDB完全支持float类型,猫鼬只支持整数型的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); 

希望它能帮助。