【发布时间】:2017-08-23 11:12:04
【问题描述】:
我试图找到查询给定场景的正确方法。
我有一群用户,他们有一个位置 latlng 和一个用户定义的半径。 我有一个兴趣点,有一个位置 latlng。 现在我想找到所有用户他们的领域,包括兴趣点的纬度。
我现在告诉你如何查询,但这显然是错误的。
架构:
const POISchema = new mongoose.Schema({
poi_uuid: {type: String, required: true},
category_uuid: {type: Number, required: true},
category: {type: String, ref: 'SubCategory'},
activity: {type: String, required: false},
infos: {type: String, required: false},
location: {
coordinates: {type: [Number], index: '2d', required: false, default: []}
}
}, {usePushEach: true});
const UserSchema = new mongoose.Schema({
user_uuid: {type: String, required: true},
helper_radius: {type: Number, required: true},
address: {
coordinates: {type: [Number], index: '2d', required: false, default: []}
}
}, {usePushEach: true});
查询:
User.find()
.and([
{
latlng: {
$near: [parseFloat(obj.coordinates[0]), parseFloat(obj.coordinates[1])],
$maxDistance: parseFloat(20 / 111.2)
}
},
{'_id': {'$ne': obj._id}},
{'categories': obj.category_uuid}
])
.exec(function (err, users) {
if (err) {
console.log(err);
return res.send(500, JSON.stringify(err))
}
return res.send({users: users})
})
我知道我可能必须使用 $geoWithin 或 $geoIntersects。但我真的不知道怎么读,我读的就像我能找到的一切。我什至没有找到如何为具有定义半径的 2d 球体声明带有 mongoose 的模式字段。也许有人可以指出我正确的方向或有一些有用的链接。
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query geospatial