Ich habe Probleme, Werte von den abgefragten Dokumenten in MongoDB abgerufen werden.MongoDB Extrahieren von Werten aus BasicDBObject (Java)
Zum Beispiel kann die doc-Struktur ist wie:
{
"_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"
}
}
}
}
Und der Abfrage-Code ist:
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");
}
Es fragt fein und holt den doc, aber ich kann nicht scheinen, um herauszufinden wie extrahiert man den Wert von "response.resData.domain: infData.domain: name" oder andere ähnlich verschachtelte Werte aus dem DBObject (oder BasicDBObject seit c.next() gibt Typ BasicDBObject zurück).
Ich kann die Objekte einen nach dem anderen holen wie:
((DBObject)obj.get("response")).get("resData")....
aber das scheint sehr umständlich.
Ich dachte, da Sie() einen verschachtelten Feldwert in BasicDBObject wie setzen können:
basicDBObject.put("response.resData.domain:infData.domain:name", "ritesh.com");
, dass ich in ähnlicher Weise() aus dem BasicDBObject Ergebnis zu holen bekommen konnte verwenden, um die gleiche Art von Schlüssel. Wie ich in dem obigen Code versucht habe mit:
Object value = obj.get("response.resData.domain:infData.domain:name");
Aber das ist ein Nullwert zurückgeben.
Es ist wahrscheinlich etwas unkompliziert, aber ich kann es nicht herausfinden. Und überall, wo ich im Netz nachgesehen habe, holen die Beispiele nur Werte, die nicht verschachtelt sind, aus dem Ergebnis. Wie
doc.get("name");
statt so etwas wie:
doc.get("name.lastname.clanname");
Jede mögliche Hilfe würde geschätzt. Vielen Dank!
Sie könnten 'fieldName.split (" \\. ")' Verwenden, um nicht von StringUtils abhängig zu sein – Esteve