我在Node.js服务器中编写了以下架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var config = require('../../config.js');
var schema = new Schema({
title : { type: String, default: "generic"},
guide : String,
loc : {
type : {type: String, default:"Point"},
coordinates : [ ]
},
}
);
schema.index({"loc":"2dsphere"});
module.exports = mongoose.model(config.DATA_TYPE.SUPPORT, schema);
然后我写了我的调度员,用于添加,删除和研究。 添加和删除都可以,但我在研究方面存在一些问题。
这是我的路线:
router.route('/')
.post(function(req, res, next){
SupportManager.getGuides(req.body.lat, req.body.lon, function(err,data){
if(err){
return res.json({
success: false,
message: 756
});
}else{
return res.json({
success: true,
message: 856,
supports: data
});
}
});
})
我的SupportManager.getGuides
是以下代码:
getGuides: function(lat,lon,callback){
Support.find({ loc: { $geoWithin: { $centerSphere: [[ lon , lat], 10/3963.2]}}}, callback);
},
奇怪的是我在db中添加了以下对象:
{
"_id": "58bf2f07d5fd2a0cdde4cca9",
"guide": "a1",
"loc": {
"coordinates": [
"34",
"22"
],
"type": "Point"
},
"title": "tappp",
"__v": 0
}
但是当我进行研究时,使用lat = 22和long = 34,我会收到
的答案success: true,
message: 856,
supports: []
阵列"支持"是空的。
答案 0 :(得分:2)
代码很完美!只是坐标值不会保存为数字。 因此Schema应该成为:
var schema = new Schema({
title : { type: String, default: "generic"},
guide : String,
loc : {
type : {type: String, default:"Point"},
coordinates : [ { Number } ]
},
}
);
DB中的坐标数据现在是
"loc": {
"coordinates": [
34,
22
],
"type": "Point"
},
而值之前是" " :
"loc": {
"coordinates": [
"34",
"22"
],
"type": "Point"
},