#mongodb #spring-data-mongodb
#mongodb #весна-данные-mongodb
Вопрос:
Я использую spring-data-mongodb.
- могу ли я запустить запрос geoNear с использованием агрегации.
- Могу ли я указать distanceField в запросе geoNear, как мы делаем в mongodb.
Ниже приведен пример запроса mongodb :-
([
{
$geoNear: {
near: [
28.45,
77.34
],
distanceField: "distance",
maxDistance: 20,
num: 5,
query: {
$or: [
{
cuisines: {
'$in': [
'Mughlai',
'NorthIndian'
]
}
}
]
}
}
},
{
$unwind: '$ProducerTimeSlots'
}
])
Ответ №1:
Вам необходимо расширить возможности агрегирования, класс GeoNearOperations не имеет переменной distanceField.
public class GeoNearOperationExt implements AggregationOperation {
private NearQuery nearQuery;
private String distanceField = "distance";
public GeoNearOperationExt(NearQuery nearQuery) {
this.nearQuery = nearQuery;
}
/**
* Default is distance
* @return
*/
public String getDistanceField() {
return distanceField;
}
/**
* Set distanceField value Default is distance
* @param distanceField
*/
public void setDistanceField(String distanceField) {
this.distanceField = distanceField;
}
@Override
public DBObject toDBObject(AggregationOperationContext context) {
DBObject dbObject = context.getMappedObject(nearQuery.toDBObject());
dbObject.put("distanceField", distanceField);
return new BasicDBObject("$geoNear", dbObject);
}
}
Чтобы использовать его в агрегации, просто включите его в массив агрегатных операций, т.Е. Параметров, передаваемых агрегатной функции.