MongoDB查询嵌套键值并比较内部值列表

时间:2018-02-26 19:09:04

标签: java mongodb filter documentfilter

我的数据库看起来像

var selectedIndex = $(".item.selected").index();
var fooCount = $(".item.selected").prevAll('.item > .foo').length;
var finalIndex = selectedIndex - fooCount;

如果我有一个坐标对作为中心位置,说[38,-98],我想检索所有在坐标范围[38 + - 2,-98 + - 2]的记录,如何编写java代码文件过滤器?

到目前为止,我所做的是检索特定位置而不是范围内。

{
  "_id" : ObjectId("5a8351093cf24e144d8fef24"),
  "__type" : "TrafficIncident:http://schemas.microsoft.com/search/local/ws/rest/v1",
  "point" : {
    "type" : "Point",
    "coordinates" : [
        37.410883,
        -95.71027
    ]
  },
  ...
}
{
  "_id" : ObjectId("5a8351093cf24e144d8fef25"),
  "__type" : "TrafficIncident:http://schemas.microsoft.com/search/local/ws/rest/v2",
  "point" : {
    "type" : "Point",
    "coordinates" : [
        40.2346,
        -100.826167
    ]
  },
  ...
}

1 个答案:

答案 0 :(得分:0)

您希望使用MongoDB的Geospatial Query系统。

我假设你正在使用Mongo's official Java Driver。首先,您要在2dsphere字段上创建point.coordinates索引。您可以使用Java执行此操作:

collection.createIndex(Indexes.geo2dsphere("point.coordinates"));

然后,您可以使用以下命令查询您所在位置范围内的所有文档:

Point refPoint = new Point(new Position(38, -98));
collection.find(Filters.near("point.coordinates", refPoint, 2, 2)).forEach(printBlock);
使用Java驱动程序进行地理空间搜索的

MongoDB's tutorial非常好。