복붙노트

[MONGODB] BasicDBObject의 값을 추출하여 MongoDB (자바)

MONGODB

BasicDBObject의 값을 추출하여 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. ==============================

    1.거기 당신은 자바 드라이버를 사용하고있는 같은 속성 이름은 체인 방법이 없다 (확실히 들어간하고,이에 따라, 풋이 중 하나가 작동을 안됩니다).

    거기 당신은 자바 드라이버를 사용하고있는 같은 속성 이름은 체인 방법이 없다 (확실히 들어간하고,이에 따라, 풋이 중 하나가 작동을 안됩니다).

    당신은 당신이 제안처럼 한 번에 하나의 개체를 얻을해야합니다.

    ((DBObject)obj.get("response")).get("resData")
    

    아마도 작업에 구문을 수 있도록 해주는 미래의 잠재적 기능 여기를 참조하십시오 (비록 가능성이 새로운 방법 이름).

  2. ==============================

    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;
    }
    

    나는 그것이 도움이되기를 바랍니다.

  3. from https://stackoverflow.com/questions/14410531/mongodb-extracting-values-from-basicdbobject-java by cc-by-sa and MIT license