2014-07-02 40 views
0

我正在使用spring-data-mongodb。spring-data-mongodb中geoNar中的distanceField

  1. 我可以使用聚合激发一个geoNear查询。
  2. 我可以在geoNear查询中指定distanceField,就像我们在mongodb中做的那样。

下面是示例MongoDB的查询: -

([ 
{ 
    $geoNear: { 
     near: [ 
      28.45, 
      77.34 
     ], 
     distanceField: "distance", 
     maxDistance: 20, 
     num: 5, 
     query: { 
      $or: [ 
       { 
        cuisines: { 
         '$in': [ 
          'Mughlai', 
          'NorthIndian' 
         ] 
        } 
       } 
      ] 
     } 
    } 
}, 
{ 
$unwind: '$ProducerTimeSlots' 
} 
]) 

回答

0

您需要延长汇聚操作能力,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); 
} 
} 

要在聚合中使用它,只需将其包含在聚集操作数组中,即将参数传递给聚合函数。