2013-09-04 3 views
2

DB 상호 작용을 위해 Java Mongo 드라이버를 사용하고 있습니다. DB 행과 상당히 중첩 된 개체에 대해 정기적 인 업데이트를 수행 할 수 있습니다. 이런 식으로 뭔가 :Java를 사용하여 값을 mongo로 업데이트하십시오.

을 MyObject :

{ 
    _id: dbGeneratedId, 
    myId: "A String ID that i created", 
    myTime: "new Date()", 
    myList: 
     [ 
     { 
      myString: "abcdefghij", 
      myInteger: 9000 
     }, 
     { 
      myString: "qwertyasdf", 
      myInteger: 9001 
     }, 
     { 
      myString: "loremipsum", 
      myInteger: 9002 
     } 
    ] 
} 

각 업데이트가 하나가 myList 아래에 새 목록 항목을 추가하거나 목록 항목의 각각의 myString 객체에 대한 몇 가지 문자열을 추가 포함한다. 나는 중첩 된 객체의 항목을 업데이트하기 위해 항목을 쓰거나 찾는데 많은 참고 자료를 찾았습니다. 누군가가 이것으로 나를 도울 수 있습니까?

편집 1 : 누군가가 myInteger 검색에

PS를 기반으로 목록 항목 중 하나를 얻는 방법을 지적 경우도 도움이 될 것입니다 : 자바 죽 몽고에 새를, 당신은 할 수

답변

2

나의 무지 변명 $push 연산자를 사용하여 새 목록 항목을 삽입하십시오.

셸에서 다음 명령을 실행하여 새 목록 항목을 추가 할 수 있습니다.

db.myObject.update({"myId" : "A String ID that i created"},{$push:{myList: {myString:"new string", myInteger:9003}}}) 

다음과 같이 Java 드라이버를 사용하여 목록 항목을 추가 할 수 있습니다.

 DBCollection coll = db.getCollection("myObject"); 
     DBObject query = new BasicDBObject("myId", "A String ID that i created"); 

     DBObject listItem = new BasicDBObject(); 
     listItem.put("myString", "my new string"); 
     listItem.put("myInteger", 9003); 

     DBObject updateObj = new BasicDBObject("myList", listItem); 

     coll.update(query, new BasicDBObject("$push", updateObj)); 

셸에서 다음과 같이 단일 요소를 가져올 수 있습니다. 다음과 같이

자바 드라이버에서
db.myObject.find({"myList.myInteger" : 9003}, {"myList.$" : 1}) 

당신은 동일한 코드를 실행할 수 있습니다

DBCursor cur = coll.find(new BasicDBObject("myList.myInteger", 9003), new BasicDBObject("myList.$", 1)); 

다음과 같이 객체를 제거 할 수 있습니다 다음과 같이

자바에서
db.nested.update({"myId" : "A String ID that i created"},{$pull:{myList: {myString:"new string", myInteger:9003}}}) 

당신은 그것을 할 수 있습니다 :

DBCollection coll = db.getCollection("myObject"); 
    DBObject query = new BasicDBObject("myId", "A String ID that i created"); 

    DBObject listItem = new BasicDBObject(); 
    listItem.put("myString", "my new string"); 
    listItem.put("myInteger", 9003); 

    DBObject updateObj = new BasicDBObject("myList", listItem); 

    coll.update(query, new BasicDBObject("$pull", updateObj)); 

추신 : 현재 it i 배열의 모든 항목을 업데이트 할 수 없습니다. Jira에는 공개 문제가 있습니다. 당신은 그것을 확인할 수 있습니다 JIRA-1243

+0

이것은 도움이 됐어!. 또한 목록에 이미있는 값을 업데이트/추가하는 방법을 알고 계십니까? 말하자면,'loremipsum'의'myString' 값을'loremipsumfoobar'로 업데이트해야합니다. 어떻게해야합니까? 어떤 도움이라도 대단히 감사합니다. – Rakesh

+1

내 대답을 업데이트했습니다. 현재 모든 배열 항목을 업데이트 할 수 없습니다. Jira에는 공개 문제가 있습니다. –

+0

메모에서 'myList'에서 개체 중 하나를 삭제하는 방법을 보여주는 스 니펫을 공유 할 수 있습니까? – Rakesh

관련 문제