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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top