Datos de primavera MongoDB NearSphere no funciona con Query. Con (Pagable)
-
20-12-2019 - |
Pregunta
Estoy usando Data-Data-Mongodb para hacer la paginación en los resultados de Mongodb Geo.
Aquí está el código relevante (con MongotEmplate):
Query query = new Query();
query.addCriteria(where("location").nearSphere(new Point(longitude, latitude)).maxDistance(0.012));
query.with(pageable);
//On any page other than the first page
//the following list is always empty (although the total number of records is much bigger than the page size)
List<MyObject> myObjects = mongoTemplate.find(query, MyObject.class);
La primera página (es decir, Página: 0, Tamaño: 5) Siempre se muestra correctamente, todas las demás páginas (es decir, Página: 1, Tamaño: 5) No contienen resultados, ya que la lista anterior estaría vacía.
Si comento a la línea 2 //query.addcriteria( loca ("locación"). Nearsphere (...), La paginación funciona correctamente.
Por cierto, no puedo usar Mongotemplate.Geonear (), ya que no es compatible incluyen / excluir de acuerdo con este
Estoy usando primavera-data-mongodb-1.5.0.Release y MongoDB 2.6.1
¿Alguna idea de cómo resolver este problema?Gracias.
Solución
Yo también encontré una solución.Parece que Mongodb tiene un comportamiento inconsistente en 'Skip + Límite' entre $ NearSphere (puede ser también $ cerca) y otras consultas.
mientras puede hacer
db.doc.find().skip(10).limit(5)
con consultas 'regulares', tienes que usar
db.doc.find({
'location': {
$nearSphere: ...,
$maxDistance: ...
}
}).skip(10).limit(15) //note the number for limit has to be 15, which
//is 'offset + pageSize' <==> '10 + 5'
por $ nesphere consultas.
Así que en primavera-data-mongodb, con mongotemplate, puede hacer esto
int offset = pageable.getOffset();
query.skip(offset);
query.limit(offset + pageable.getPageSize());
...
mongoTemplate.find(query, ...);
en lugar de
query.with(pageable);
...
mongoTemplate.find(query, ...);
que me dio los resultados esperados (con MongoDB 2.6.1 + Datos de resorte MongoDB 1.5.1).
No puedo decir si este es un error de mongodb, pero al menos se ve confuso.