【问题标题】:How to query relational document in mongoose?如何在猫鼬中查询关系文档?
【发布时间】:2020-07-02 21:27:37
【问题描述】:

有两个集合。

集合 - 发布者

{ _id:“2461177814122722”, 名称:“努尔” 地点: { 类型:“点”, 坐标:[90.341044, 23.787105] } }

收藏 - 帖子

{ _id:“5e7447336da7300a1cb64c51”, 型号:华硕, 发布者:“2461177814122722”, 价格:1255 }

我怎样才能这样查询?

posts.find({
  postedBy: {
    location: {
      $near: [-74, 40],
      $maxDistance: 10
    }
  }
});

我想通过下面的这个文件来查询。但是如何在 mongoose 中查询关系文档呢?

{
  _id: "5e7447336da7300a1cb64c51",
  model: asus,
  postedBy: {
    name: "Nur",
    location: {
      type: "Point",
      coordinates: [90.341044, 23.787105]
    }
  },
  price: 1255
};

【问题讨论】:

标签: mongodb mongoose


【解决方案1】:

首先你必须创建一个二维索引:

db.PostedBy.createIndex({ location: "2dsphere" })

然后你可以像这样运行聚合:

db.PostedBy.aggregate([
   {
      $geoNear: {
         near: {
            type: "Point",
            coordinates: [-74, 40]
         },
         distanceField: "distance",
         //maxDistance: 20000, // max. Distance in Meters
         spherical: true
      }
   },
   {
      $lookup:
         {
            from: "posts",
            localField: "_id",
            foreignField: "postedBy",
            as: "posts"
         }
   },
   {
      $project: {
         model: "$posts.model",
         price: "$posts.price",
         postedBy: { name: "$name", location: "$location" }
      }
   }
])

注意,[-74, 40][90.341044, 23.787105] 超过 10000 公里,请验证您的输入值。

pricemodel 的值作为数组返回,因为每个“PostedBy”可能有多个帖子。如果您想获得单个元素,请分别附加 { $set: { model: { $arrayElemAt: ["$model", 0] } } }{ $unwind: "$model" }price

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 2017-06-01
    • 2019-10-19
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2013-10-21
    相关资源
    最近更新 更多