这是我的收藏模型:
db={
"user": [
{
"_id": ObjectId("5ed5525d98980326b5505c0a"),
"friends": [
{
"friend_id": ObjectId("5ed54c3d98980326b5505ad2")
},
]
},
{
"_id": ObjectId("5ed54c3d98980326b5505ad2"),
"friends": []
}
],
"geo": [
{
"_id": ObjectId("5ed54e6a98980326b5505b4b"),
"user_id": ObjectId("5ed54c3d98980326b5505ad2"),
"location": {
"type": "Point",
"coordinates": [
58.631576,
49.614203
]
}
}
]
}我的任务是写一个聚合,以便让所有距离小于400米的朋友。我的聚合:
db.users.aggregate([
{
$project: {
"friends": 1
}
},
{
$lookup: {
from: "geo",
localField: "_id",
foreignField: "user_id",
as: "my_geo"
}
},
{
$unwind: "$my_geo"
},
{
$lookup: {
from: "geo",
let: {
"loc": "$my_geo.location.coordinates",
"uid": "$_id"
},
pipeline: [
{
$geoNear: {
near: "$$loc",
distanceField: "dist.calculated",
spherical: false,
maxDistanse : 400
}
}
],
as: "us_geo"
}
}
])不幸的是,near字段在$geoNear中需要一个数组,并且不想接受$$loc。在第一步中,我得到了我的地理位置,在使用$lookup和pipline之后,我想让我所有朋友的地理位置接近400米。也许您会建议另一种数据存储模型,我不太喜欢,但我希望您能帮助完成聚合。我坐了很长时间,寻求专家的帮助。我已经尝试了许多不同的方法,甚至谷歌也没有帮助我。
发布于 2020-06-09 20:18:22
经过长时间的搜索,我发现了这个问题,所以目前蒙戈还不能做到这一点。链接到发布:https://jira.mongodb.org/browse/SERVER-34766
https://stackoverflow.com/questions/62289771
复制相似问题