geoNear只能在aggregate()之后第一执行
我有 店铺 和 产品 两个表 店铺有坐标,然后我根据坐标geoNear排序附近店铺没问题 [代码]db.collection([代码][代码]'shop'[代码][代码]).aggregate()[代码][代码] [代码][代码].geoNear({[代码][代码] [代码][代码]distanceField: [代码][代码]'distance'[代码][代码], [代码][代码]// 输出的每个记录中 distance 即是与给定点的距离[代码][代码] [代码][代码]spherical: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]near: db.Geo.Point(113.3089506, 23.0968251),[代码][代码] [代码][代码]key: [代码][代码]'location'[代码][代码], [代码][代码]// 若只有 location 一个地理位置索引的字段,则不需填[代码][代码] [代码][代码]includeLocs: [代码][代码]'location'[代码][代码], [代码][代码]// 若只有 location 一个是地理位置,则不需填[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码][代码] [代码][代码].then(res => console.log(res))[代码][代码] [代码][代码].[代码][代码]catch[代码][代码](err => console.error(err))[代码] 但我根据经纬度坐标排序查产品时,就实现不了了, 因为产品没经纬度,经纬度在店铺那,跟着店铺的。 所以要先联表查询店铺,根据店铺的坐标,再来排序. 但geoNear()放方法要求一定要房aggregate(),之后第一, 不能放在lookup()后,会报错啊 要怎么解决啊? [代码]db.collection([代码][代码]'productions'[代码][代码]).aggregate()[代码][代码] [代码][代码].lookup({[代码][代码] [代码][代码]from: [代码][代码]'shop'[代码][代码],[代码][代码] [代码][代码]localField: [代码][代码]'shopId'[代码][代码],[代码][代码] [代码][代码]foreignField: [代码][代码]'_id'[代码][代码],[代码][代码] [代码][代码]as: [代码][代码]'shop'[代码][代码],[代码][代码] [代码][代码]})[代码][代码] [代码][代码].replaceRoot({[代码][代码] [代码][代码]newRoot: $.mergeObjects([$.arrayElemAt([[代码][代码]'$shop'[代码][代码], 0]), [代码][代码]'$$ROOT'[代码][代码]])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].geoNear({[代码][代码] [代码][代码]distanceField: [代码][代码]'distance'[代码][代码], [代码][代码]// 输出的每个记录中 distance 即是与给定点的距离[代码][代码] [代码][代码]spherical: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]near: db.Geo.Point(113.3089506, 23.0968251),[代码][代码] [代码][代码]key: [代码][代码]'location'[代码][代码], [代码][代码]// 若只有 location 一个地理位置索引的字段,则不需填[代码][代码] [代码][代码]includeLocs: [代码][代码]'location'[代码][代码], [代码][代码]// 若只有 location 一个是地理位置,则不需填[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码][代码] [代码][代码].then(res => console.log(res))[代码][代码] [代码][代码].[代码][代码]catch[代码][代码](err => console.error(err))[代码]