У меня есть документ образовательного учреждения, который выглядит так:
{ name: ..., addresses: [{state: ..., locs: []}, ...], courses: [...] }
Где locs, где мои геопространственные точки.
Чтобы выполнить команду $near
, мне нужно $unwind
адресов, потому что у меня может быть образовательное учреждение во многих точках.
Мой текущий метод выглядит так:
public BasicDBList findByCoordinates(double latitude, double longitude){
BasicDBObject cmdBody = new BasicDBObject("aggregate", "EducationalInstitution");
List<BasicDBObject> pipeline = new ArrayList<BasicDBObject>();
BasicDBObject projectParams = new BasicDBObject();
projectParams.put("name", 1);
projectParams.put("addresses.state", 1);
projectParams.put("addresses.locs", 1);
projectParams.put("courses", 1);
BasicDBObject geoParams = new BasicDBObject();
geoParams.put("$near", new double[] { latitude, longitude });
geoParams.put("$maxDistance", 50/111.12);
pipeline.add(new BasicDBObject("$project", projectParams));
pipeline.add(new BasicDBObject("$unwind", "$addresses"));
cmdBody.put("pipeline", pipeline);
cmdBody.put("$addresses.locs", geoParams);
return (BasicDBList) getDatastore().getDB().command(cmdBody).get("result");
}
Пробовал ближний метод от morphia
createQuery().field("addresses.locs").near(latitude, longitude, 50/111.12);
Однако он возвращает все адреса, которые я хочу раскрутить, мне просто нужен адрес, который находится рядом с какой-то точкой