Ho problemi a recuperare i valori dai documenti richiesti in MongoDB.MongoDB estrazione di valori da BasicDBObject (Java)
Ad esempio, la struttura è come doc:
{
"_id": {
"$oid": "50f93b74f9eccc540b302462"
},
"response": {
"result": {
"code": "1000",
"msg": "Command completed successfully"
},
"resData": {
"domain:infData": {
"domain:name": "ritesh.com",
"domain:crDate": "2007-06-15T12:02:36.0000Z",
"domain:exDate": "2013-06-15T12:02:36.0000Z"
}
}
}
}
E il codice di query è:
DBCollection collection = db.getCollection("domains");
BasicDBObject p = new BasicDBObject("response.resData.domain:infData.domain:name", "ritesh.com");
DBCursor c = collection.find(p);
while(c.hasNext()) {
DBObject obj = c.next();
Object value = obj.get("response.resData.domain:infData.domain:name");
}
Interroga bene e recupera il doc, ma io non riesco a capire come estrarre il valore di "response.resData.domain: infData.domain: name" o altri valori simili nidificati dal DBObject (o BasicDBObject poiché c.next() restituisce il tipo BasicDBObject).
ho potuto prendere gli oggetti uno alla volta come:
((DBObject)obj.get("response")).get("resData")....
ma che sembra molto ingombrante.
ho pensato da quando si può mettere() un valore di campo nidificato in BasicDBObject come:
basicDBObject.put("response.resData.domain:infData.domain:name", "ritesh.com");
che ho potuto allo stesso modo utilizzare Get() per recuperare dal risultato BasicDBObject utilizzando lo stesso tipo di chiave. Come ho tentato di fare nel codice sopra con:
Object value = obj.get("response.resData.domain:infData.domain:name");
Ma questo sta restituendo un valore nullo.
Probabilmente è qualcosa di semplice, ma non riesco a capirlo. E ovunque ho controllato in rete, gli esempi recuperano solo valori che non sono nidificati, dal risultato. Come
doc.get("name");
invece di qualcosa di simile:
doc.get("name.lastname.clanname");
Qualsiasi aiuto sarebbe apprezzato. Grazie!
È possibile utilizzare 'fieldName.split (" \\. ")' Per non dipendere da StringUtils – Esteve