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

回到顶部