我有2个收集ServiceProvider和Parents。
ServiceProvider(_id,ServiceProviderID,...)
家长(_id,ID,位置:[Lat,Long],...)
ServiceProvider集合的ServiceProviderID链接到Parents集合的ID。
我希望所有服务提供商都在10英里范围内。
所以基本上我想加入ServiceProvider和Parents集合,并列出10英里范围内的所有ServiceProvider。
我尝试了以下查询:
db.ServiceProvider.aggregate([
{
$lookup:
{
from: "Parents",
localField: "ServiceProviderID",
foreignField: "ID",
as: "ServiceProviderArr"
}
},
{
$match: { "ServiceProviderArr": { $ne: [] } }
}
])
它给了我以下结果:
{
"_id" : ObjectId("577cc2ce588aec59178b4567"),
...
"ServiceProviderArr" : [
{
"_id" : ObjectId("577cbe33588aecf6168b45c6"),
"ID" : "193",
...
"Location" : {
"Lat" : "40.75368539999999",
"Long" : "-73.9991637"
}
}
]
}
答案 0 :(得分:1)
如果我理解得很好,这个查询可能就是您所需要的:
db.Parents.aggregate([
{ $geoNear: {
near: { type: "Point", coordinates: [ 0, 0 ] },
spherical: true,
distanceField: "dist.calculatedd",
maxDistance: 10
}
},
{ $lookup: {
from: "ServiceProvider",
localField: "ID",
foreignField: "ServiceProviderID",
as: "ServiceProviderArr"
}
}
]).pretty()
您需要相应地更改中心点坐标和最大距离