2012-03-09 19 views
7

Estoy tratando de consultar campos específicos en una colección de mongodb. Aquí está mi código y de salida:Campos de consulta en una colección MongoDB.

Mongo m = new Mongo(); 
    DB db = m.getDB("mydb"); 
    DBCollection coll = db.getCollection("student") ; 


    // adding data 
    BasicDBObject moz = new BasicDBObject(); 
    moz.put("Name", "Mozammil"); 
    coll.insert(moz); 



    DBCursor cursor = coll.find(); 


    while (cursor.hasNext()) { 
     System.out.println(cursor.next()); 

    } 

Esto devuelve lo siguiente:

{ "_id" : { "$oid" : "4f5a4477c5e80f71ece56797"} , "Name" : "Mozammil"} 

Sin embargo, quiero solamente la parte del nombre. Buscando en Google, esto debería hacer el trabajo.

DBCursor cursor = coll.find({}, {'Name':1}); 


    while (cursor.hasNext()) { 
     System.out.println(cursor.next()); 
    } 

Pero no está funcionando. ¿Ayuda por favor?

+0

En su lugar, debe modificar su impresión. En lugar de simplemente volcar toda la fila de 'cursor.next()', debe poner eso en 'JSONObject' y luego solo imprimir los campos que desee usando los métodos JSONObject – jzworkman

+0

En realidad, hay otro problema con la consulta en sí. http://d.pr/YVXu –

+0

Quise decir simplemente usar el primer find() y luego analizar solo el campo de nombre en el ciclo de impresión. – jzworkman

Respuesta

9

Puede utilizar obtener en el documento devuelto por el cursor para obtener el campo que está buscando. De esta manera:

System.out.println(cursor.next().get("key")); 
+0

Muchas gracias. La última línea hizo el truco. –

+1

Esto probablemente transfiera todo el documento al cliente, lo que puede ser costoso según el tamaño del documento. – stryba

+0

¿cómo se puede imprimir varias claves del mismo objeto utilizando este método? – gregdevs

6

Tome un vistazo a DBCollection.find

BasicDBObject query = new BasicDBObject(); // because you have no conditions 
BasicDBObject fields = new BasicDBObject("Name",1); 
coll.find(query, fields); 
+0

cámbielo a N mayúscula para el nombre, y debería funcionar. –

+0

Ah, y agrega una coma en lugar de dos puntos. :( –

+0

Lo siento, no funciona. Todavía salidas {"_id": {"$ oid": "4f5a39b0c5e8bf8284432cb4"}, "Nombre": "Mozammil"} –

9

Sé que ya aceptó una respuesta, pero no es exactamente lo que estaba pidiendo.

Aquí hay un código de trabajo:

// get Mongo set up... 
Mongo m = new Mongo(); 
DB db = m.getDB("test"); 
DBCollection coll = db.getCollection("test"); 

// insert a test record 
coll.insert(new BasicDBObject("Name","Wes").append("x", "to have a second field")); 

// create an empty query 
BasicDBObject query = new BasicDBObject(); 
// configure fields to be returned (true/1 or false/0 will work) 
// YOU MUST EXPLICITLY CONFIGURE _id TO NOT SHOW 
BasicDBObject fields = new BasicDBObject("Name",true).append("_id",false); 

// do a query without specifying fields (and print results) 
DBCursor curs = coll.find(query); 
while(curs.hasNext()) { 
    DBObject o = curs.next(); 
    System.out.println(o.toString()); 
} 

// do a query specifying the fields (and print results) 
curs = coll.find(query, fields); 
while(curs.hasNext()) { 
    DBObject o = curs.next(); 
    System.out.println(o.toString()); 
} 

Los primeros resultados de las consultas:

{ "_id" : { "$oid" : "4f5a6c1603647d34f921f967"} , "Name" : "Wes" , "x" : "to have a second field"} 

y la segunda salidas de consulta:

{ "Name" : "Wes"} 
0
BasicDBObject query = new BasicDBObject(); 

BasicDBObject fields = new BasicDBObject(); 
fields.put("name", 1); 

DBCursor cursor = collection.find(query, fields); 
while (cursor.hasNext()) { 
    System.out.println(cursor.next()); 
} 
+0

Aunque este fragmento de código puede resolver la pregunta, [incluida una explicación] (http://meta.stackexchange.com/questions/114762/explaining- enteramente basado en código-respuestas) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta para lectores en el futuro, y esas personas podrían no conocer los motivos de su sugerencia de código. –

1
collection.find().projection(Projections.include("Name")) 

esto funcionó muy bien !!!

+0

deseo ayudarle –

+0

Edita con más información ación. Se desalientan las respuestas de solo código y "prueba esto", ya que no contienen contenido que se pueda buscar y no explican por qué alguien debe "probar esto".Hacemos un esfuerzo aquí para ser un recurso para el conocimiento. – abarisone

+0

OK. Tal vez tenga razón, pero al principio creo que si proporciono más información al respecto, la respuesta no tiene sentido. El conocimiento es importante, pero un corazón para explorar aún más valioso. –

Cuestiones relacionadas