这是我的猫鼬模式 -
var userDestinationSchema = mongoose.Schema({
uid: String,
update_time: Date,
some_data: String,
location:{ //<INDEXED as 2d>
lon: Number,
lat: Number
}
});
var userDestinationModel = mongoose.model('userDestinationModel', userDestinationSchema);
要查询geoNear的模型,我这样做。
userDestinationModel.geoNear(lng, lat, { maxDistance : 1.5 },
function(err, results, stats) {
console.log(results);
});
如何添加更多约束,例如some_data的特定值?
答案 0 :(得分:1)
&#34;最佳方式&#34;是根据需要使用$near
运算符或$nearSphere
。 mongoose的.geoNear()
方法使用旧的geoNear
command MongoDB。其他运算符在最近的版本中与其他查询运算符更好地匹配:
userDestinationModel.find({
"location": {
"$near": [ lng, lat ],
"$maxDistance": 1.5
},
"update_time": { "$gt": new Date("2015-01-01") }
},function(err,result) {
});
您还可以使用$geoNear的聚合框架表单。这有它自己的&#34;查询&#34;选项以指定其他信息:
userDestinationModel.aggregate(
[
{ "$geoNear": {
"near": [ lng, lat ],
"maxDistance": 1.5,
"distanceField": "distance",
"query": {
"update_time": { "$gt": new Date("2015-01-01") }
}
}}
],
function(err,result) {
}
);
这允许其他选项以及它与项目所在的"command form"和其他&#34; distanceField&#34;在结果中,您可以将其用于以后的排序或过滤等等。
您还应该能够指定&#34;查询&#34;作为猫鼬方法的一个选项:
userDestinationModel.geoNear(lng, lat,
{
"maxDistance" : 1.5,
"query": {
"update_time": { "$gt": new Date("2015-01-01") }
}
},
function(err, results, stats) {
console.log(results);
});
但作为个人偏好,除非您依赖于较旧的服务器版本支持,否则我会选择较新的运营商。
同时尝试远离传统的坐标对和GeoJSON,因为它与其他API更加一致,您可能会在数据交换中使用以及支持更多种类的GeoJSON类型。请注意,移动到GeoJSON的参数如&#34; maxDistance&#34;并且返回的距离以&#34;米&#34;而不是&#34;弧度&#34;与传统坐标一样。