texto recorrer rangos que por mayor igual consultas consultar consulta busqueda buscar basicas arreglo array java spring mongodb spring-data spring-data-mongodb

java - recorrer - rangos en mongodb



¿Cómo devolver JSON en bruto directamente desde una consulta mongodb en Java? (2)

Como señala Oliver, puedes usar SpringData para eso, pero una alternativa que puedes o no preferir sería usar el controlador Java de más bajo nivel de mongoDb. Eche un vistazo a estos documentos para ver cómo usar ese controlador.

Básicamente, lo que necesitas hacer es esto:

MongoClient mongoClient = new MongoClient(); DB db = mongoClient.getDB("test"); DBCollection coll = db.getCollection("testCollection"); BasicDBObject query = new BasicDBObject("_id", "51a29f6413dc992c24e0283e"); DBCursor cursor = coll.find(query); try { while(cursor.hasNext()) { System.out.println(cursor.next()); } } finally { cursor.close(); }

Eso imprimirá todos los documentos de la colección que tengan un campo _id con un valor 51a29f6413dc992c24e0283e .

Tengo el siguiente código:

@RequestMapping(value = "/envinfo", method = RequestMethod.GET) @ResponseBody public Map getEnvInfo() { BasicQuery basicQuery = new BasicQuery("{_id:''51a29f6413dc992c24e0283e''}", "{''envinfo'':1, ''_id'': false }"); Map envinfo= mongoTemplate.findOne(basicQuery, Map.class, "jvmInfo"); return envinfo; }

Como puedes observar, el código:

  1. Recupera JSON de MongoDB
  2. Lo convierte en un objeto Map
  3. Spring MongoData convierte el objeto de Map a JSON antes de devolverlo al navegador.

¿Es posible devolver directamente el json sin procesar desde MongoDb sin pasar por los pasos de conversión intermedios?


Hay dos formas en que puedes hacer esto ahora mismo:

1. Usando el CollectionCallback en MongoTemplate

Puede usar un CollectionCallback para tratar con el DBObject devuelto directamente y simplemente toString() :

template.execute("jvmInfo", new CollectionCallback<String>() { String doInCollection(DBCollection collection) { DBCursor cursor = collection.find(query) return cursor.next().toString() } }

Aún obtendré la traducción de excepción a las DataAccessExceptions de Spring. Tenga en cuenta que esto es un poco frágil, ya que esperamos que solo se devuelva un solo resultado para la consulta, pero probablemente sea algo de lo que tenga que ocuparse cuando intente producir una String todos modos.

2. Registrar un Converter de DBObject a String

Puede implementar un Converter Spring para hacer el toString() por usted.

class DBObjectToStringConverter implements Converter<DBObject, String> { public String convert(DBObject source) { return source == null ? null : source.toString(); } }

Luego puede usar la configuración XML o anular customConversions() para devolver una new CustomConversions(Arrays.asList(new DBObjectToStringConverter())) para registrarla con su MongoConverter . A continuación, puede simplemente hacer lo siguiente:

String result = mongoTemplate.findOne(basicQuery, String.class, "jvmInfo");

Agregaré el convertidor que se acaba de mostrar a Spring Data MongoDB y lo registraré de manera predeterminada para la próxima versión 1.3 GA y llevaré la solución a 1.2.x como parte de la solución para DATAMONGO-743 .