이것은 내 샘플 코드입니다.
DBCollection coll = db.getCollection("testCollection");
BasicDBObject search = new BasicDBObject("$search", "mytextsearch");
BasicDBObject textSearch = new BasicDBObject("$text", search);
BasicDBObject projection = new BasicDBObject("score", new BasicDBObject("$meta", "textScore"));
myDoc = coll.findOne(textSearch, projection);
이렇게하면 "mytextsearch"검색에 대해 가장 높은 점수를받은 문서를 myDoc이라고합니다.
그런 다음 컬렉션에서이 문서를 제거하고 싶습니다.
coll.remove(myDoc);
그러나 이것은 컬렉션에 영향을 미치지 않으며 myDoc은 삭제되지 않습니다. 내가 무엇을 잘못하고 있지? myDoc을 찾은 후 삭제할 수 있기를 원합니다.
remove-method는 전달한 문서를 제거하지 않습니다. DBObject
전달 된 모든 필드가 공통 인 모든 문서를 제거합니다 . 이 경우이 구별이 중요한 이유는 무엇입니까? 투영을 사용하여 문서를 변경하고 있기 때문입니다.
투영 후 DBObject에는 새 필드가 textScore=something
있습니다. 그런 다음 해당 DBObject를에 전달 .remove()
하면 데이터베이스는 textScore
정확한 값을 가진 필드가있는 문서 만 삭제 합니다. 컬렉션의 원본 문서에는이 필드가 없기 때문에 삭제되지 않습니다.
그래서 대신 무엇을합니까?
삭제하려는 문서 중 BasicDBObject
하나만 사용하여 새로 만듭니다 _id
. _id
필드는 항상 고유하고 자동으로 인덱싱 되기 때문에 명확하고 빠릅니다. 그런 다음 이것을 .remove
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다