Mam problemy z odczytaniem wartości z zapytanych dokumentów w MongoDB.MongoDB pobiera wartości z BasicDBObject (Java)
Na przykład, struktura doc jest jak:
{
"_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"
}
}
}
}
I kod zapytania to:
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");
}
Pyta porządku i pobiera doc, ale nie wydają się dowiedzieć jak wyodrębnić wartość "response.resData.domain: infData.domain: name" lub inne podobnie zagnieżdżone wartości z DBObject (lub BasicDBObject ponieważ c.next() zwraca typ BasicDBObject).
mogę pobrać obiektów jednym na raz jak:
((DBObject)obj.get("response")).get("resData")....
ale to wydaje się być bardzo kłopotliwe.
Myślałem, ponieważ można umieścić() zagnieżdżony wartość pola w BasicDBObject jak:
basicDBObject.put("response.resData.domain:infData.domain:name", "ritesh.com");
że mogę używać podobnie get(), aby pobrać od wyniku BasicDBObject stosując ten sam rodzaj klucza. Jak próbowałem zrobić w powyższym kodzie:
Object value = obj.get("response.resData.domain:infData.domain:name");
Ale to zwraca wartość zerową.
To prawdopodobnie coś prostego, ale nie mogę tego zrozumieć. I wszędzie, gdzie sprawdziłem w sieci przykłady pobierają tylko wartości, które nie są zagnieżdżone, od wyniku. Jak
doc.get("name");
zamiast coś takiego:
doc.get("name.lastname.clanname");
Każda pomoc będzie mile widziane. Dzięki!
Można użyć 'fieldName.split (" \\. ")', Aby nie polegać na StringUtils – Esteve