【发布时间】:2018-07-12 23:44:25
【问题描述】:
我正在开发一个系统,该系统允许用户注册以接收有关在特定日期范围内某个位置一定距离内发布的新事件的警报。
当用户注册警报时,我会创建一个如下所示的文档:
{
"_id":"5b43ab8eb0a638000e188615",
"confirmed":true,
"confirmed_at":"2018-07-10T14:20:51.078Z",
"created_at":"2018-07-09T18:38:06.874Z",
"date_start":"2018-07-30T00:00:00.000Z",
"date_end":"2018-08-31T00:00:00.000Z",
"email":"me@example.com",
"location":{
"type":"Point",
"coordinates": [-90.44065060000003,31.5790588]
},
"location_name":"Brookhaven, MS 39601, USA",
"distance":150,
"unsubscribed":false,
"unsubscribed_at":null
}
位置字段上还有一个2dspehere 索引。
创建新事件时,我需要能够查询集合中的所有文档,这些文档的 date_start 和 date_end 范围包含事件的日期,并且球体中的位置包含事件。
给定一个看起来像这样的事件:
{
start_date: "2018-08-01",
latitude: 30.6954595,
longitude: -88.174414
}
我希望上面的文档会被返回,因为活动的开始日期在给定的范围内,并且活动在距离所需位置 150 英里(准确地说是 147 英里)内。
另外需要注意的是,事件本身在 MongoDB 中并不存在。它们在单独的系统中创建和管理,我们将定期查询该系统的 API 以获取新创建的事件。
这是我第一次涉足 mongodb 的地理空间方面,所以我不确定如何处理这个问题。我一直在尝试使用 $geoWithin 和 $centerSphere 运算符,但似乎无法让它们工作。
我是否正在尝试从 MongoDB 中进行单个查询,或者我是否需要提取所有满足数据范围条件的文档并在应用程序中遍历文档以查看它们的范围包含活动地点?
我想我已经包含了所有相关信息,但如果需要更多信息,请提出,我会更新问题。
谢谢!
【问题讨论】:
标签: mongodb