【问题标题】:Geospacial search returns less results than available地理空间搜索返回的结果少于可用的结果
【发布时间】:2018-06-28 16:48:29
【问题描述】:

我有一个包含 356 个文档的集合(用户)和字段地理数据上的索引“2dsphere”。 120 个文档有一个字段 geodata:{type:"Point", coordinates:[X,Y]} 其中 X 和 Y 是德国境内的坐标。

如果我执行以下聚合:

db.users.aggregate(
    [
        {
            "$geoNear":{
                near: { type: "Point", coordinates: [48.783469, 9.181842] },
                distanceField: "distanceCalculated",
                spherical: true
            }
        },
        {
             "$sort":{"distanceCalculated":1}
        }
    ]
)

我得到 46 个结果,但据我所知,我应该得到至少 100 个(limit 参数的标准) 如我所见,所有结果都在 ~210 公里以内,是否有任何未记录的标准 maxDistance?我也尝试了不同的 maxDistance 值,但从未得到超过 48 个结果。

我的问题是,我该怎么做才能获得按距离排序的所有 (120) 个结果?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    发现陷阱: 所有 (120) 个文档都将 geodata.coordinates 的类型设置为对象而不是数组。不幸的是,我不能说为什么 mongoDB 仍然返回了一些结果而不是 null。我使用以下命令转换了所有条目,现在它可以工作了:

    db.users.find({ "geodata": { $exists: true, $ne: null }}).forEach((user)=> { 
      var coordinates = user.geodata.coordinates;
      user.geodata.coordinates = [coordinates["0"], coordinates["1"]];
      db.users.save(user);
    });
    

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2023-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多