我有以下mongoose查询:
User.aggregate([
{
$geoNear: {
near: {type: 'Point', coordinates: [ 1 , 1 ]},
distanceField: 'dis',
maxDistance: '$comRange' * 1000,
spherical: true
}
},
{
$match: {isVolunteer: true, 'devices.enabled': true, }
},
{
$group: { _id: '$devices.deviceID'.replace(/"/g, '')}
}
],
(err, locations) => {
console.log('locations',JSON.stringify(locations, null, 4))
}
);
我在文档中有另一个包含用户坐标的字段:
volAddressCoords : {type: Object, properties: {type: {type: String, enum: 'Point', default: 'Point'}, coordinates: {type: [Number], default: [0, 0]}, index: '2dsphere'}},
comRange : {type: Number, min: 1, max: 20},
devices : {type: Array}
在其他路径中接收POST请求时会创建设备:
let device = {
enabled: true,
deviceID : req.body.deviceId
};
无论我穿上什么坐标值(靠近或远离comRange)
near: {type: 'Point', coordinates: [ 1 , 1 ]}
它总会返回:
locations [
{
"_id": [
"\"e_Fhn7sWzXE:APA91bGb5xpw4o\"",
"\"eI2K-6iUvVw:APA91bGrdwh29H\""
]
}
]
我在这里缺少什么?当坐标远时,应该有一个空白数组,当坐标在comRange
内时,它应该填充数组。
除了修复此查询之外,还有更好的方法来改进此查询吗?