MongoDB的$ geoWithin $ centerSphere查询
我写了下面的模式在我的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);
},
奇怪的行为是我加的下列对象在我的数据库:
{ "_id": "58bf2f07d5fd2a0cdde4cca9",
"guide": "a1",
"loc": {
"coordinates": [
"34",
"22"
],
"type": "Point"
},
"title": "tappp",
"__v": 0
}
但是当我做研究时,使用lat = 22和long = 34,我收到了与
success: true, message: 856,
supports: []
数组“supports”为空。
回答:
该代码是完美的!只是坐标值不会被保存为数字。 所以模式应该成为:在DB
var schema = new Schema({ title : { type: String, default: "generic"},
guide : String,
loc : {
type : {type: String, default:"Point"},
coordinates : [ { Number } ]
},
}
);
和坐标数据将现在
"loc": { "coordinates": [
34,
22
],
"type": "Point"
},
而值为之间的“”前:
"loc": { "coordinates": [
"34",
"22"
],
"type": "Point"
},
以上是 MongoDB的$ geoWithin $ centerSphere查询 的全部内容, 来源链接: utcz.com/qa/258894.html