문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

트랜잭션 및 작업

이 페이지의 내용

  • 다중 문서 트랜잭션에서 지원되는 작업
  • CRUD 작업
  • 카운트 연산
  • 차별화된 운영
  • 관리 운영
  • 정보 운영
  • 제한된 작업

거래의 경우:

  • 트랜잭션 외부에서 생성된 커서의 경우 트랜잭션 내부에서 getMore을(를) 호출할 수 없습니다.

  • 트랜잭션에서 생성된 커서의 경우 트랜잭션 외부에서 getMore를 호출할 수 없습니다.

트랜잭션에서 허용되는 읽기/쓰기 작업은 다음과 같습니다.

메서드
명령
참고
db.collection.aggregate()

다음 쿼리 연산자 표현식은 제외됩니다.

이 메서드는 쿼리에 $match 애그리게이션 단계를 사용하고 $sum 표현식이 있는 $group 애그리게이션 단계를 사용하여 계산을 수행합니다.

비샤드형 컬렉션에서 사용할 수 있습니다.

샤드 컬렉션의 경우 $group 단계의 집계 파이프라인을 사용합니다. 고유 작업 을 참조하세요.

존재하지 않는 collection에서 upsert: true )로 업데이트 또는 바꾸기 작업을 실행하면 collection이 암시적으로 생성됩니다.

MongoDB 4.2 이하 버전에서 upsert: true인 경우 기존 컬렉션에서 작업을 실행해야 합니다.

다음도 참조하세요.

존재하지 않는 컬렉션에서 실행하면 컬렉션이 암시적으로 생성됩니다.

MongoDB 4.2 이하 버전에서는 기존 컬렉션에서 작업을 실행해야 합니다.

다음도 참조하세요.

존재하지 않는 컬렉션에서 실행하면 컬렉션이 암시적으로 생성됩니다.

MongoDB 4.2 이하 버전에서는 기존 컬렉션에서 작업을 실행해야 합니다.

다음도 참조하세요.

존재하지 않는 컬렉션에서 실행하면 컬렉션이 암시적으로 생성됩니다.

MongoDB 4.2 이하 버전에서는 기존 컬렉션에서 작업을 실행해야 합니다.

다음도 참조하세요.

참고

샤드 키 값 업데이트

트랜잭션에서 또는 재시도 가능 쓰기로 단일 문서 업데이트/찾기 및 수정(update/findAndModify) 작업을 실행해 문서의 샤드 키 값을 업데이트할 수 있습니다(샤드 키 필드가 변경 불가능한 _id 필드인 경우 제외). 자세한 내용은 문서의 샤드 키 값 변경에서 확인하세요.

트랜잭션 내에서 카운트 연산을 수행하려면 $count 집계 단계 또는 $group($sum 표현식 포함) 집계 단계를 사용합니다.

MongoDB 드라이버는 $sum 표현식과 함께 $group를 사용하여 카운트를 수행하는 헬퍼 메서드로서 컬렉션 수준 API countDocuments(filter, options)을 제공합니다. count() API는 더 이상 사용되지 않습니다.

mongoshdb.collection.countDocuments() 표현식과 함께 를 사용하여 $group $sum 카운트를 수행하는 헬퍼 메서드를 제공합니다.

트랜잭션 내에서 고유한 작업을 수행합니다.

  • 샤드되지 않은 컬렉션의 경우, db.collection.distinct() 메서드/distinct 명령과 $group 단계의 aggregation pipeline을 사용할 수 있습니다.리

  • 샤드된 컬렉션의 경우 db.collection.distinct() 메서드 또는 distinct 명령을 사용할 수 없습니다.

    샤딩된 컬렉션의 고유 값을 찾으려면 대신 $group 단계의 집계 파이프라인을 사용합니다. 예를 들면 다음과 같습니다.

    • db.coll.distinct("x")0} 대신 다음을 사용합니다.

      db.coll.aggregate([
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])
    • db.coll.distinct("x", { status: "A" })0} 대신 다음을 사용합니다.

      db.coll.aggregate([
      { $match: { status: "A" } },
      { $group: { _id: null, distinctValues: { $addToSet: "$x" } } },
      { $project: { _id: 0 } }
      ])

    파이프라인은 문서에 커서를 반환합니다.

    { "distinctValues" : [ 2, 3, 1 ] }

    커서를 반복하여 결과 문서에 액세스합니다.

트랜잭션이 교차 샤드 쓰기 트랜잭션인 아닌 경우 분산 트랜잭션 내에서 컬렉션과 인덱스를 생성할 수 있습니다.

명령
메서드
참고 사항
생성할 인덱스는 컬렉션이 작업의 일부로 생성된 경우 존재하지 않는 컬렉션에 있어야 하며, 또는 동일한 트랜잭션에서 이전에 생성된 빈 신규 컬렉션에 있어야 합니다.

참고

트랜잭션 내에서 컬렉션이나 인덱스를 명시적으로 만들려면 트랜잭션 읽기 고려 수준이 "local"여야 합니다.

트랜잭션에서 컬렉션 및 인덱스 만드는 방법에 대한 자세한 내용은 트랜잭션에서 컬렉션 및 인덱스 생성을 참조하세요.

존재하지 않는 컬렉션에 대해 다음과 같은 쓰기 작업을 통해 컬렉션을 암시적으로 만들 수도 있습니다.

존재하지 않는 컬렉션에 대해 메서드 실행
존재하지 않는 컬렉션에 대해 명령 실행
findAndModifyupsert: true
updateupsert: true
삽입 또는 upsert:true 작업이 있는 db.collection.bulkWrite()
삽입 또는 upsert:true 작업을 통한 다양한 대량 작업 메서드

트랜잭션에서 허용되는 다른 CRUD 작업에 대해서는 CRUD 작업을 참조하세요.

트랜잭션에서 컬렉션 및 인덱스 만드는 방법에 대한 자세한 내용은 트랜잭션에서 컬렉션 및 인덱스 생성을 참조하세요.

2} buildInfo,helloconnectionStatus , 과 같은 정보 명령(및 그 도우미 메서드) (및 해당 헬퍼 메서드)와 같은 정보 명령은 트랜잭션에서 허용되지만, 트랜잭션의 첫 번째 연산이 될 수는 없습니다.

트랜잭션에서 허용되지 않는 작업은 다음과 같습니다.

← 프로덕션 고려 사항(샤드 클러스터)