Docs Menu
Docs Home
/ /

문서 삭제

이 가이드에서는 MongoDB 코틀린(Kotlin) 드라이버를 사용하여 문서를 제거하는 방법에 대해 설명합니다.

쿼리 필터하다 deleteOne(), deleteMany() 또는 findOneAndDelete() 메서드에 전달하여 문서를 제거 할 수 있습니다.

  • deleteOne() 메서드: 단일 문서 삭제. 쿼리 필터하다 둘 이상의 문서 와 일치하는 경우 메서드는 컬렉션 에서 최초로 일치하는 항목을 제거 .

  • deleteMany() 메서드: 쿼리 필터와 일치하는 모든 문서를 삭제합니다.

  • findOneAndDelete() 메서드: 컬렉션 에서 일치하는 항목을 처음 찾아 삭제합니다. 일치하는 문서 반환합니다.

인덱스를 데이터 정렬 또는 힌트로 지정하려면 deleteOne()deleteMany() 메서드에 대한 두 번째 매개변수로 DeleteOptions 을 사용합니다.

데이터 정렬을 지정하거나, 인덱스에 힌트를 제공하거나, 정렬 순서를 지정하거나, 반환된 문서에 프로젝션을 지정하려면 findOneAndDelete() 메서드의 두 번째 매개변수로 FindOneAndDeleteOptions 를 사용합니다.

단일 문서를 삭제할 때 _id 와 같은 고유 인덱스로 쿼리를 필터링하여 쿼리가 삭제하려는 문서와 일치하도록 합니다.

다음 예는 8가지 색상의 페인트를 판매하는 페인트 가게에 관한 예입니다. 이 스토어는 연례 온라인 판매를 통해 paint_inventory collection에 다음 문서를 포함시켰습니다.

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 3, "color": "blue", "qty": 0 }
{ "_id": 4, "color": "white", "qty": 0 }
{ "_id": 5, "color": "yellow", "qty": 6 }
{ "_id": 6, "color": "pink", "qty": 0 }
{ "_id": 7, "color": "green", "qty": 0 }
{ "_id": 8, "color": "black", "qty": 8 }

이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.

data class PaintOrder(
@BsonId val id: Int,
val qty: Int,
val color: String
)

페인트 매장 웹사이트에는 paint_inventory collection의 모든 문서가 표시됩니다. 매장에서는 고객의 혼동을 줄이기 위해 재고가 없는 색상을 제거하려고 합니다.

재고가 없는 색상을 제거하려면 qty0paint_inventory 컬렉션을 쿼리하고 쿼리를 deleteMany() 메서드에 전달합니다.

val filter = Filters.eq("qty", 0)
collection.deleteMany(filter)

다음은 paint_inventory collection에 남아 있는 문서를 보여줍니다.

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 5, "color": "yellow", "qty": 6 }
{ "_id": 8, "color": "black", "qty": 8 }

참고

설정 예시

이 예시 연결 URI를 사용하여 MongoDB 인스턴스 에 연결합니다. MongoDB 인스턴스에 연결하는 방법에 대해 자세히 학습하려면 MongoDB 에 연결 가이드를 참조하세요. 이 예시 Atlas 샘플 데이터 세트에 포함된 sample_mflix 데이터베이스의 movies 컬렉션도 사용합니다. MongoDB 시작하기 가이드 에 따라 MongoDB Atlas의 프리 티어에서 데이터베이스에 로드할 수 있습니다.

다음 예시 는 imdb 하위 문서에서 2.9 미만의 rating 를 포함하는 movies 컬렉션 의 모든 문서를 찾아 삭제하는 완전히 실행 가능한 파일 입니다.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val imdb: IMDB){
data class IMDB(val rating: Double)
}
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
val query = Filters.lt("${Movie::imdb.name}.${Movie.IMDB::rating.name}", 2.9)
try {
val result = collection.deleteMany(query)
println("Deleted document count: " + result.deletedCount)
} catch (e: MongoException) {
System.err.println("Unable to delete due to an error: $e")
}
mongoClient.close()
}
Deleted document count: 4

이 가게는 남은 노란색 페인트 수량을 기부합니다. 즉, 노란색의 qty 는 이제 0 이며 collection에서 노란색을 제거해야 합니다.

노란색을 제거하려면 color"yellow"paint_inventory 컬렉션을 쿼리하고 deleteOne() 메서드에 쿼리를 전달합니다.

val filter = Filters.eq("color", "yellow")
collection.deleteOne(filter)

다음은 paint_inventory collection에 남아 있는 문서를 보여줍니다.

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 2, "color": "purple", "qty": 8 }
{ "_id": 8, "color": "black", "qty": 8 }

참고

설정 예시

이 예시 연결 URI를 사용하여 MongoDB 인스턴스 에 연결합니다. MongoDB 인스턴스에 연결하는 방법에 대해 자세히 학습하려면 MongoDB에 연결 가이드를 참조하세요. 이 예시 Atlas 샘플 데이터 세트에 포함된 sample_mflix 데이터베이스movies 컬렉션도 사용합니다. MongoDB 시작하기 가이드 에 따라 MongoDB Atlas 의 프리 티어 에서 데이터베이스 에 로드할 수 있습니다.

다음 예시 다음 조치를 수행하는 완전히 실행 가능한 파일 입니다.

  • eq() 필터를 사용하여 title 가 텍스트 'The Garbage Pail Kids Movie'와 정확히 일치하는 동영상을 일치시킵니다.

  • movies 컬렉션 에서 일치하는 단일 문서 삭제합니다.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val title: String)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
val query = Filters.eq(Movie::title.name, "The Garbage Pail Kids Movie")
try {
val result = collection.deleteOne(query)
println("Deleted document count: " + result.deletedCount)
} catch (e: MongoException) {
System.err.println("Unable to delete due to an error: $e")
}
mongoClient.close()
}

예시 실행 하면 deleteOne() 호출에서 전달한 쿼리 필터하다 문서 와 일치하여 문서를 제거하면 다음과 유사한 출력이 표시됩니다.

Deleted document count: 1

쿼리 필터가 collection의 문서와 일치하지 않는 경우 deleteOne() 를 호출하면 문서가 제거되지 않고 다음이 반환됩니다.

Deleted document count: 0

상점에서는 나머지 수량의 자주색 페인트를 뽑고 paint_inventory collection에서 자주색을 제거하려고 합니다.

색상을 선택하려면 color"purple"paint_inventory collection을 쿼리하고 쿼리를 findOneAndDelete() 메서드에 전달합니다. 다른 삭제 메서드와 달리 findOneAndDelete() 는 삭제된 문서를 반환합니다.

val filter = Filters.eq("color", "purple")
val result = collection.findOneAndDelete(filter)
println("The following was deleted: $result")
The following was deleted: PaintOrder(id=2, qty=8, color=purple)

참고

쿼리 필터와 일치하는 문서가 없으면 문서가 삭제되지 않고 메서드는 null 을(를) 반환합니다.

다음은 paint_inventory collection에 남아 있는 문서를 보여줍니다.

{ "_id": 1, "color": "red", "qty": 5 }
{ "_id": 8, "color": "black", "qty": 8 }

이 가이드에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 리소스를 참조하세요.

돌아가기

문서 교체

이 페이지의 내용