문서
이 페이지의 내용
개요
Scala 드라이버에는 Scala BSON 문서에 대한 두 가지 전용 표현이 포함되어 있습니다. Scala 컬렉션 라이브러리의 규칙에 따라 Document
유형의 불변 및 변경 가능한 구현이 있습니다. 의 기본 Document
구현은 형식이 안전한 BsonDocument 를 사용합니다. 클래스. BSON 클래스는 유형 별칭 및 컴패니언 객체를 포함하는 org.mongodb.scala.bson
네임스페이스에서 사용할 수 있습니다. 이러한 객체는 많은 사용 사례에서는 충분해야 하지만 고급 사용 사례에서는 org.bson
네임스페이스의 클래스를 직접 사용해야 할 수도 있습니다.
중요
중복 키 이름
문서 에서 중복된 키 이름과 관련된 서버의 동작은 정의되지 않았습니다. 키 이름이 중복된 문서 가 디코딩되면 운전자 는 중복 키와 관련된 마지막 값을 할당합니다. 이러한 문서 를 저장하면 다른 값이 손실될 수 있습니다.
참고
Scala Document
클래스는 TraversableLike[(String,
BsonValue)]
을 구현하고 일반 API 는 Map[String,
BsonValue]
값을 미러링합니다. 그러나 Map
TraversableLike
구현은 값 유형에 변화가 없기 때문에 엄격한 유형 안전성을 가능하게 합니다.
BsonValue
org.bson
라이브러리에 있는 BSON type의 type-safe 표현이며 특정 값 유형을 나타냅니다. 가장 일반적으로 사용되는 값 유형은 다음과 같습니다.
BSON 유형 | Scala 유형 |
---|---|
Document | org.mongodb.scala.bson.Document |
Array | List |
Date | Date 또는 int (에포크 이후 밀리초) |
Boolean | Boolean |
Double | Double |
Int32 | Integer |
Int64 | Long |
String | String |
Binary | Array[Byte] |
ObjectId | ObjectId |
Null | None |
이러한 매핑을 변경하거나 확장할 수 있으며, 프로세스는 다음 섹션에 설명되어 있습니다.
다음 섹션에서는 두 가지 주요 Document
클래스에 대해 설명합니다.
변경할 수 없는 문서
Scala 컬렉션 라이브러리와 마찬가지로 변경할 수 없는 클래스가 기본 클래스입니다. 편의상 org.mongodb.scala.Document
및 org.mongodb.scala.bson.Document
로 별칭이 지정되며 org.mongodb.scala.bson.collection.immutable.Document
에서 사용할 수 있습니다.
이 유형의 인스턴스는 모든 사람이 변경할 수 없습니다. 이러한 컬렉션은 생성된 후에는 변경되지 않습니다. 따라서 서로 다른 시점에 동일한 컬렉션 값에 반복적으로 액세스하면 항상 동일한 요소를 가진 컬렉션이 생성된다는 사실을 신뢰할 수 있습니다.
import org.mongodb.scala.bson._ val doc1 = Document("AL" -> BsonString("Alabama")) val doc2 = doc1 + ("AK" -> BsonString("Alaska")) val doc3 = doc2 ++ Document("AR" -> BsonString("Arkansas"), "AZ" -> BsonString("Arizona"))
변경 가능한 문서
변경 가능한 Document
유형을 가져오려면 org.mongodb.scala.collections.mutable.Document
에서 명시적으로 가져와야 합니다. 변경 가능한 Document
는 제자리에서 업데이트하거나 확장할 수 있습니다. 즉, Document
의 요소를 부작용으로 변경, 추가 또는 제거할 수 있습니다. Scala 컬렉션과 유사하게, 변경 가능한 유형을 처리할 때는 어떤 코드가 어떤 컬렉션을 언제 변경하는지 이해해야 합니다.
import org.mongodb.scala.bson._ import org.mongodb.scala.bson.collection.mutable.Document val doc = Document("AL" -> BsonString("Alabama")) val doc1 = doc + ("AK" -> BsonString("Alaska")) // doc not mutated but new doc created doc1 ++= Document("AR" -> BsonString("Arkansas"), "AZ" -> BsonString("Arizona")) // doc1 mutated as ++= changes in place.
암시적 변환
대부분의 BsonValue
유형에는 Scala 유형으로부터의 명백한 직접 매핑이 있습니다. 예를 들어 String
은 BsonString
에 매핑하고, Int
는 BsonInt32
에 매핑하며, Long
는 BsonInt64
에 매핑합니다. 편의상 이러한 유형은 Document
유형과 함께 직접 사용할 수 있으며 BsonMagnets
객체의 계약 특성에 의해 변환됩니다. 특정 유형에 대한 범위에 암시적 BsonTransformer
이 있는 한 해당 유형은 BsonValue
로 변환될 수 있습니다.
다음 BsonTransformers
이 기본값 범위에 있습니다.
Scala 유형 | BsonValue |
---|---|
Boolean | BsonBoolean |
String | BsonString |
Array[Byte] | BsonBinary |
Regex | BsonRegex |
Date | BsonDateTime |
ObjectId | BsonObjectId |
Int | BsonInt32 |
Long | BsonInt64 |
Double | BsonDouble |
immutable.Document | BsonDocument |
mutable.Document | BsonDocument |
Option[T] | BsonValue 여기서 T 에는 BsonTransformer 이 있습니다. |
Seq[(String, T)] | BsonDocument 여기서 T 에는 BsonTransformer 이 있습니다. |
Seq[T] | BsonArray 여기서 T 에는 BsonTransformer 이 있습니다. |
BsonValue | BsonValue |
import org.mongodb.scala.Document val doc1 = Document("AL" -> "Alabama") val doc2 = doc1 + ("AK" -> "Alaska") val doc3 = doc2 ++ Document("AR" -> "Arkansas", "population" -> 2.966)
이는 마그넷 패턴 을 사용하여 달성할 수 있으며, 이에 대한 자세한 내용은 spray.io의 마그넷 패턴 블로그 게시물에서확인할 수 있습니다.
일반적으로 단일 값이나 키-값 쌍 또는 많은 키 값 쌍(예: BsonValue
, (String
, BsonValue
) 또는 Iterable[(String, BsonValue)]
)이 예상되는 API에서는 다음이 될 수 있는 모든 것이 필요합니다. 올바른 유형을 준수하는 데 필요한 암시적 변환을 처리하는 CanBeX
트레이트를 통해 유형을 지정합니다. 이러한 특성은 CanBeBsonValue
, CanBeBsonElement
및 CanBeBsonElements
입니다.
한 가지 예로 Document
또는 값 목록에 키-값 쌍을 추가하는 것을 들 수 있습니다.
val doc1 = Document("AL" -> "Alabama") val doc2 = Document("codes" -> List("AL", "AK", "AR"))
Bson
드라이버에는 Bson
이라는 작지만 강력한 인터페이스도 포함되어 있습니다. 드라이버 자체에 포함되어 있든 타사에서 제공하든 BSON 문서를 나타내는 모든 클래스는 이 인터페이스를 구현할 수 있으며 BSON 문서가 필요한 상위 수준 API의 모든 위치에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.
collection.find(Document("x" -> 1)) collection.find(Filters.eq("x", 1))