[SPRING] MongoDB-Java 드라이버를 사용하여 배열에서 항목을 제거하십시오.
SPRINGMongoDB-Java 드라이버를 사용하여 배열에서 항목을 제거하십시오.
나는 JSON을 좋아한다.
{
"_id" : "1",
"_class" : "com.model.Test",
"itemList" : [
{
"itemID" : "1",
"itemName" : "Foo",
"resources" : [
{
"resourceID" : "1",
"resourceName" : "Foo Test1"
}, {
"resourceID" : "2",
"resourceName" : "Foo Test2"
}
]
}
]
}
itemList의 레코드 중 하나를 제거 할 수 있어야합니다. 나는 다음을했다 :
public void removeItemByID(String docID, String itemID) throws Exception {
MongoOperations mongoOperations = mongoConfiguration.getMongoTemplate();
Query query = new Query(where("_id").is(docID).and("itemList.itemID").is(itemID));
mongoOperations.remove(query, Item.class);
}
이 방법은 효과가 없습니다. 그러나 $ pull 접근 방식으로 BasicDBObject를 사용하면 잘 작동합니다! 이러한 접근 방식의 차이점은 무엇입니까?
해결법
-
==============================
1.일반적으로 배열을 제거하려면 다음을 사용하십시오.
일반적으로 배열을 제거하려면 다음을 사용하십시오.
BasicDBObject match = new BasicDBObject("_id", "1"); // to match your document BasicDBObject update = new BasicDBObject("itemList", new BasicDBObject("itemID", "1")); coll.update(match, new BasicDBObject("$pull", update));
-
==============================
2.템플리트에서 remove 메소드는 문서를 제거합니다. 배열에서 항목을 제거하려면 당겨 사용해야합니다. 좋아요.
템플리트에서 remove 메소드는 문서를 제거합니다. 배열에서 항목을 제거하려면 당겨 사용해야합니다. 좋아요.
MongoOperations mongoOperations = mongoConfiguration.getMongoTemplate(); Query query = new Query(where("_id").is(docID).and("itemList.itemID").is(itemID)); Update update = new Update().pull("itemList", new BasicDBObject("itemID", "1")); mongoOperations.updateFirst(query, update, Item.class);
from https://stackoverflow.com/questions/10097621/remove-an-entry-from-array-using-mongodb-java-driver by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 추상 DAO 패턴과 Spring의 "프록시를 캐스팅 할 수 없습니다 ..."라는 문제! (0) | 2019.01.19 |
---|---|
[SPRING] 스프링 autowire 인터페이스 (0) | 2019.01.19 |
[SPRING] 주석이있는 클래스의 주석이 달린 메소드 또는 메소드에 대한 Pointcut (0) | 2019.01.19 |
[SPRING] 기본 생성자가 없습니다. 중첩 예외는 스프링 MVC가있는 java.lang.NoSuchMethodException입니까? (0) | 2019.01.19 |
[SPRING] 컨트롤러에 HttpServletRequest 삽입 (0) | 2019.01.19 |