mongodb - 如何根据取决于输入的算术表达式过滤 mongodb 中的结果?
问题描述
假设我有一个包含这样条目的集合:
{_id: "foo" lng: -98.21 lat: 77.131 }
{_id: "foo" lng: -100.12 lat: 770.313 }
{_id: "foo" lng: -98.32 lat: 772.123 }
其中 lng 和 lat 对应经度和纬度。
我只想返回输入经度和纬度一定半径内的条目。因此,这意味着对于半径 R,sqrt((inputLatiude - docLatitude)^2 + (inputLongitude - docLonguitude)^2) < R。我不想返回所有文档并添加一个告诉我它是否在R与否。我只想返回符合条件的字段。我如何查询这个?
解决方案
您需要在此处使用$near来执行此操作。但是$near
需要构建一个2dsphere索引,由于文档结构与所需结构不匹配,目前您似乎没有该索引。
那么你必须做什么?
- 重组您的文档,以便
lng
和lat
字段可以被 2dsphere 索引:
{
_id: "foo",
loc : { type: "Point", coordinates: [ -98.21, 77.131 ] },
}
在字段上建立这样的索引
loc
。用于
$near
查询:
db.collection.find(
{
loc:
{ $near :
{
$geometry: { type: "Point", coordinates: [ inputLng, inputLat ] },
$maxDistance: R
}
}
}
)
推荐阅读
- google-cloud-firestore - 检查用户名是否存在于firestore中并返回true swiftUI
- python - 必须运行 glob.glob 两次才能工作(Python3)
- sql - oracle CASE WHEN 语句中如何查找重复记录
- r - for 循环中的嵌套 if 语句,“条件长度 > 1 且仅使用第一个元素”
- angular - 如何将存储(用户会话)数据传递到侧菜单离子 5?
- python - 如何从numpy数组中获取分段对象的区域
- python - Paramiko 无法获取 xwindow 信息
- html - 光滑的缩略图滑块当前更改缩略图焦点需要悬停
- sql - 什么是“指定的重复键值”。AS/400 -SQL 中的错误?
- javascript - 发送带有动作触发器和 onclick 触发器的表单