0

我有两个文档集合,

  1. Products => productID , addressId (具有带地址表的 FK )
  2. 地址=> 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 下得到了多个地址。

我的期望是:- 获取符合此条件的产品

请建议我如何做到这一点。

4

0 回答 0