2016-10-27 3 views
1

여기 MongoDB를 배우고 있습니다. 그리고 MongoDB Java 드라이버를 사용하여 아주 기본적인 작업을 수행하는 데 어려움을 겪고 있습니다. 문서에있는 배열에서 요소를 제거하려고합니다. 이 문서는 다음과 같습니다 : I 즉 {"SE" : 96} 배열의 두 번째 요소를 제거하기 위해 노력하고MongoDB : Java 드라이버를 사용하여 당기기

db.test.find().pretty() 
{ 
    "_id" : ObjectId("581245dd51030d389f5cf701"), 
    "name" : "Rahul", 
    "scores" : [ 
     { 
      "SDM" : 97 
     }, 
     { 
      "SE" : 96 
     }, 
     { 
      "DM" : 80 
     } 
    ] 
} 

. coll.update(match, new BasicDBObject("$pull", update));을 사용하여이를 달성 할 수 있음을 이해합니다. 그러나 나는 com.mongodb.client.model.Updates.pull(final String fieldName, final TItem value) 방법을 활용하고 싶습니다. 나는이 시도하고 실제로 문서에는 변경이 없을 때 일이 아무것도 기대하지

1) : 이것은 내가 질문을 게시하기 전에 뭘하려

.

` Bson filter = Filters.eq("name", "Rahul"); 
    Bson delete = Updates.pull("SE", 96); 
    collection.updateOne(filter, delete);` 

2) 다음은 예외입니다.

` Bson filter = Filters.eq("name", "Rahul"); 
    Bson delete = Updates.pull("scores.SE", 96); 
    collection.updateOne(filter, delete);` 

예외 :

Exception in thread "main" com.mongodb.MongoWriteException: cannot use the part (scores of scores.SE) to traverse the element ({scores: [ { SDM: 97.0 }, { SE: 96.0 }, { DM: 80.0 } ]}) 
    at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:523) 
    at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:508) 
    at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:355) 
    at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:350) 
    at com.mongodb.mongoProject.crud.UpdateTest.main(HW_3_1.java:30) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

나는이 문제 하겠어 어디 알려 주시기 바랍니다.

감사합니다 ...

답변

3

이 시도 :

Bson delete = Updates.pull("scores", new Document("SE", 96));

+0

이 일을, 감사합니다. 나는 MongoDB 질의어를 사용하기가 꽤 어렵다. 잘만되면 나는 언젠가 그것을 얻을 것이다. –

관련 문제