我有两个文档集合,
- Products => productID , addressId (具有带地址表的 FK )
- 地址=> addressId,位置{类型:“点”,坐标:[72.01,32.94]}
现在我正在选择离我最近的产品,最大距离为 25KM
我写了一个查询,写在下面:-
var aggQuery = [];
if (query.isAddressFilter || (!_.isNaN(parseFloat(query.long)) && !_.isNaN(parseFloat(query.lat))))
{
let addressQuery = {};
addressQuery['$lookup'] = {};
addressQuery['$lookup']['from'] = "addresses";
addressQuery['$lookup']['as'] = "address";
var nearPosition = {
'type': "Point",
'coordinates': [parseFloat(query.long), parseFloat(query.lat)]
};
addressQuery['$lookup']['pipeline'] = [{
$geoNear: {
includeLocs: "location",
distanceField: "distance",
near: nearPosition,
maxDistance: 1000 * parseFloat(query.distance) , //(KM)
distanceMultiplier: 0.001,
spherical: true,
}
},
{ "$sort": { "distance": 1 } },
];
aggQuery.push(addressQuery);
}
var items = await this.productModel.aggregate(aggQuery);
return item ;
根据上面的查询,我得到了结果,但我在 product 下得到了多个地址。
我的期望是:- 获取符合此条件的产品
请建议我如何做到这一点。