[MONGODB] BasicDBObject의 값을 추출하여 MongoDB (자바)
MONGODBBasicDBObject의 값을 추출하여 MongoDB (자바)
나는 MongoDB의에 쿼리 문서에서 문제가 검색 중 값을 갖는입니다.
예를 들어, 문서의 구조와 같다 :
{
"_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"
}
}
}
}
그리고 쿼리 코드는 다음과 같습니다
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");
}
그것은 벌금을 쿼리하고 문서를 가져옵니다,하지만 난의 값을 추출하는 방법을 알아낼 수없는 것 C 이후 DBOBJECT (또는 BasicDBObject에서 "response.resData.domain : 이름 : infData.domain"또는 다른 유사하게 중첩 된 값을. 다음 () 반환) BasicDBObject를 입력합니다.
나는 한 번 같은 하나의 개체를 가져올 수 :
((DBObject)obj.get("response")).get("resData")....
그러나 그것은 매우 성가신 것 같다.
난 당신처럼 BasicDBObject에서) (중첩 된 필드 값을 넣을 수 있기 때문에 생각 :
basicDBObject.put("response.resData.domain:infData.domain:name", "ritesh.com");
나는 유사하게 얻을 사용할 수 있음 () 키의 동일한 종류를 사용하여 BasicDBObject 결과에서 가져올 수 있습니다. 마찬가지로 내가 가진 위의 코드에서 할 시도 :
Object value = obj.get("response.resData.domain:infData.domain:name");
그러나 NULL 값이 반환된다.
아마 뭔가 간단합니다,하지만 난 그것을 알아낼 수 없습니다. 내가 인터넷에서 확인한 모든 곳에서 그리고 예는 단지 결과에서, 중첩되지 않은 값을 가져옵니다. 처럼
doc.get("name");
대신 같은의 :
doc.get("name.lastname.clanname");
어떤 도움을 주시면 감사하겠습니다. 감사!
해결법
-
==============================
1.거기 당신은 자바 드라이버를 사용하고있는 같은 속성 이름은 체인 방법이 없다 (확실히 들어간하고,이에 따라, 풋이 중 하나가 작동을 안됩니다).
거기 당신은 자바 드라이버를 사용하고있는 같은 속성 이름은 체인 방법이 없다 (확실히 들어간하고,이에 따라, 풋이 중 하나가 작동을 안됩니다).
당신은 당신이 제안처럼 한 번에 하나의 개체를 얻을해야합니다.
((DBObject)obj.get("response")).get("resData")
아마도 작업에 구문을 수 있도록 해주는 미래의 잠재적 기능 여기를 참조하십시오 (비록 가능성이 새로운 방법 이름).
-
==============================
2.저도 같은 문제로 실행하고 나는 체인 속성을 가져 오기 위해 작은 기능을 썼다.
저도 같은 문제로 실행하고 나는 체인 속성을 가져 오기 위해 작은 기능을 썼다.
private Object getFieldFromCursor(DBObject o, String fieldName) { final String[] fieldParts = StringUtils.split(fieldName, '.'); int i = 1; Object val = o.get(fieldParts[0]); while(i < fieldParts.length && val instanceof DBObject) { val = ((DBObject)val).get(fieldParts[i]); i++; } return val; }
나는 그것이 도움이되기를 바랍니다.
from https://stackoverflow.com/questions/14410531/mongodb-extracting-values-from-basicdbobject-java by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 삽입 또는 갱신하여 MongoDB의 upsert 그랬다면 확인 (0) | 2019.12.18 |
---|---|
[MONGODB] 삽입 (), insertOne ()와 insertMany () 메소드의 차이점은 무엇입니까? (0) | 2019.12.18 |
[MONGODB] 어떻게 문자열에서 날짜 데이터 형식으로 변환하는? (0) | 2019.12.18 |
[MONGODB] NoSQL이 많은 관계 많은 (및 MongoDB를 몽구스) (0) | 2019.12.18 |
[MONGODB] MongoDB의에서 중첩 된 문서를 업데이트 (0) | 2019.12.18 |