首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB $lookup配$geoNear

MongoDB $lookup配$geoNear
EN

Stack Overflow用户
提问于 2020-06-09 18:45:50
回答 1查看 172关注 0票数 0

这是我的收藏模型:

代码语言:javascript
复制
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米的朋友。我的聚合:

代码语言:javascript
复制
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。在第一步中,我得到了我的地理位置,在使用$lookuppipline之后,我想让我所有朋友的地理位置接近400米。也许您会建议另一种数据存储模型,我不太喜欢,但我希望您能帮助完成聚合。我坐了很长时间,寻求专家的帮助。我已经尝试了许多不同的方法,甚至谷歌也没有帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-09 20:18:22

经过长时间的搜索,我发现了这个问题,所以目前蒙戈还不能做到这一点。链接到发布:https://jira.mongodb.org/browse/SERVER-34766

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62289771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档