首页 > 解决方案 > 地理空间搜索返回的结果少于可用的结果

问题描述

我有一个包含 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 个(限制参数的标准) 正如我所看到的,所有结果都在 ~210 公里内是否有任何未记录的标准 maxDistance?我也尝试了不同的 maxDistance 值,但从未得到超过 48 个结果。

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

标签: mongodb

解决方案


发现陷阱:所有 (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);
});

推荐阅读