MongoDB添加位置前如何检查经纬度是否已存在?
问题解决:坐标重复检查错误的修复
核心问题
你的查询存在两个关键错误:
- 查询路径错误:直接使用
coordinates字段,但实际该字段嵌套在location下,正确路径应为location.coordinates - 运算符误用:
$all仅检查数组包含指定元素(不要求顺序、长度完全匹配),无法实现坐标数组的精确匹配
修正后的精确匹配查询
如果要检查完全相同的坐标是否存在,使用以下代码:
AddressModel.findOne({ "location.coordinates": [41.3326643802986, 19.8263257802456] }).lean();
扩展:检查相近坐标(地理空间查询)
如果需要判断是否存在距离极近的重复位置(比如10米内),可以利用已创建的2dsphere索引做地理空间查询:
AddressModel.findOne({ location: { $nearSphere: { $geometry: { type: "Point", coordinates: [19.8263257802456, 41.3326643802986] // 注意GeoJSON标准顺序:[经度, 纬度] }, $maxDistance: 10 // 单位:米 } } }).lean();
提示:当前存储的坐标顺序是[纬度, 经度],不符合GeoJSON标准格式,建议调整为[经度, 纬度]以避免地理空间查询出错。
内容的提问来源于stack exchange,提问作者Gopala Krishnan
相关产品推荐
相关产品推荐

