mongodb - 地理空间搜索返回的结果少于可用的结果
问题描述
我有一个包含 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)个结果按距离排序?
解决方案
发现陷阱:所有 (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);
});
推荐阅读
- javascript - 如何将 Promise.race 或 Promise.all 与异步迭代一起使用?
- reactjs - 我可以在不弹出的情况下将 Create React App Jest Testing 与测试报告器一起使用吗?
- python - Python (Selenium) - 如何将第 1 页到最后一页的数据保存到同一个 CSV
- python-3.x - 在运行 huggingface gpt2-xl 模型嵌入索引超出范围时
- google-apps-script - 如何使用自定义函数将一个单元格中的字符串格式化为另一个单元格中的数字?
- sql - 避免在 PostgreSQL 中的正确元素上使用 SQL 子查询双连接?
- java - LuaJ 在强制 Java 对象中迭代对象数组
- sql - 有没有办法使用换行符将文本从单元格拆分为 SQL 中的多个记录?
- javascript - 在发生之前使用 css matrix3d 转换计算元素边界矩形
- c - Inflate 解压操作成功,没有处理完整的压缩数据