개요
이 가이드 에서는 Ruby 운전자 로 MongoDB 데이터베이스 및 컬렉션을 사용하는 방법을 학습 수 있습니다.
MongoDB는 데이터를 다음 수준의 계층 구조로 구성합니다.
데이터베이스: MongoDB 인스턴스에서 데이터 구성의 최상위 수준입니다.
컬렉션: MongoDB는 문서를 컬렉션에 저장합니다. 관계형 데이터베이스의 테이블과 유사합니다.
문서: string, 숫자, 날짜 및 기타 내장된 문서와 같은 리터럴 데이터를 포함합니다.
문서 필드 유형 및 구조에 대한 자세한 내용은 MongoDB Server 매뉴얼의 문서 가이드를 참조하세요.
데이터베이스에 액세스
원하는 데이터베이스 이름으로 Mongo::Client 인스턴스 생성하여 데이터베이스 액세스합니다.
다음 예제에서는 test_database 데이터베이스에 액세스합니다.
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_database') database = client.database
컬렉션에 액세스
데이터베이스 인스턴스 에서 [] 메서드를 사용하여 컬렉션 에 액세스합니다.
다음 예시 test_collection이라는 컬렉션 에 액세스합니다.
database = client.database collection = database['test_collection']
팁
제공된 컬렉션 이름이 데이터베이스에 아직 존재하지 않는 경우, MongoDB는 데이터를 처음 삽입할 때 컬렉션을 암시적으로 생성합니다.
컬렉션 생성
MongoDB 용 Ruby 운전자 직접적인 create_collection 메서드가 없지만 create 메서드를 사용하여 특정 옵션이 있는 컬렉션 만들 수 있습니다.
다음 예시 특정 옵션을 사용하여 example_collection이라는 컬렉션 만듭니다.
database = client.database database[:example_collection].create(capped: true, size: 1024)
최대 크기, 문서 유효성 검사 규칙 등과 같은 컬렉션 옵션을 create 명령과 함께 command 메서드에 인수로 전달하여 지정할 수 있습니다. 선택적 매개변수의 전체 목록은 생성 명령에 대한 MongoDB 설명서를 참조하세요.
컬렉션 목록 가져오기
collections 메서드를 호출하여 데이터베이스 의 컬렉션 목록을 쿼리 할 수 있습니다. 이 메서드는 데이터베이스 에 있는 컬렉션 객체의 배열 반환합니다.
다음 예시 collections 메서드를 호출하고 배열 을 반복하여 결과를 출력합니다.
database = client.database collection_list = database.collections collection_list.each do |collection| puts collection.name end
데이터베이스에서 컬렉션 이름만 쿼리하려면 다음과 같이 collection_names 메서드를 호출합니다.
database = client.database collection_names = database.collection_names collection_names.each do |name| puts name end
참고
database.collections 객체 목록은 더 자세한 정보를 제공하는 반면(예: 각 컬렉션 객체 에서 메타데이터 추가 쿼리할 수 있음), database.collection_names 는 단순히 컬렉션 이름을 나열합니다.
컬렉션 삭제
drop 메서드를 사용하여 데이터베이스에서 컬렉션을 삭제할 수 있습니다.
다음 예시에서는 test_collection 컬렉션을 삭제합니다.
database = client.database collection = database[:test_collection] collection.drop
경고
컬렉션을 제거하면 컬렉션의 모든 데이터가 삭제됨
데이터베이스에서 컬렉션을 삭제하면 해당 컬렉션 내의 모든 문서와 모든 인덱스가 영구적으로 삭제됩니다.
컬렉션의 데이터가 더 이상 필요하지 않은 경우에만 컬렉션을 삭제하세요.
읽기 및 쓰기 작업 구성
읽기 설정( read preference)을 설정하여 드라이버가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 및 쓰기 고려를 설정하여 드라이버가 복제본 세트에 대한 읽기 및 쓰기 작업의 승인을 기다리는 방법에 대한 옵션을 제어할 수도 있습니다.
기본적으로 데이터베이스는 Mongo::Client 인스턴스에서 이러한 설정을 상속하고 컬렉션은 데이터베이스에서 설정을 상속합니다. 그러나 다음 방법 중 하나를 사용하여 데이터베이스 또는 컬렉션에서 이러한 설정을 변경할 수 있습니다.
database.with: 데이터베이스 가져오고 새로운 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 적용합니다.collection.with: 컬렉션 가져오고 새로운 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 적용합니다.
앞의 메서드를 사용하여 읽기 또는 쓰기 (write) 설정을 변경하려면 메서드를 호출하고 새 읽기 설정 (read preference), 읽기 고려 (read concern) 또는 쓰기 고려 (write concern) 전달합니다.
다음 예시 database.with 메서드를 사용하여 test-database 데이터베이스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 (write) 설정을 변경하는 방법을 보여 줍니다.
database_with_settings = client.use('test_database').with( read: { mode: :secondary }, read_concern: { level: :local }, write: { w: :majority } )
다음 예시 에서는 컬렉션 의 읽기 설정 (read preference), 읽기 고려 (read concern)) 및 쓰기 고려 (write concern) 변경하는 방법을 보여줍니다.
collection_with_settings = client[:test_collection].with( read: { mode: :secondary }, read_concern: { level: :local }, write: { w: :majority } )
읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.
태그 세트
MongoDB Server 에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그를 적용 할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.
기본값 으로 MongoDB Ruby 운전자 읽기 작업을 위해 프라이머리 멤버를 선택합니다. 읽기 설정을 설정하고 선택적으로 태그를 지정하다 세트를 설정하여 이 동작을 수정할 수 있습니다.
다음 코드 예시 에서 :read 매개변수에 전달된 태그 세트 Ruby 운전자 뉴욕 데이터 센터 ('dc':'ny')에서 읽기를 선호하고 샌프란시스코 데이터 센터 ('dc':'sf')로 대체하도록 지시합니다.
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'test', read: { mode: :secondary, tag_sets: [{'dc' => 'ny'}, {'dc' => 'sf'}] }) database = client.database collection = database[:example_collection]
복제본 세트에 대해 자세히 학습하려면 MongoDB Server 매뉴얼 복제본 세트 멤버 페이지를 참조하세요.
LocalThreshold
여러 복제본 세트 멤버가 지정한 읽기 설정 (read preference) 및 태그를 지정하다 세트와 일치하는 경우, Ruby 운전자 핑 시간에 따라 선택된 샤딩된 클러스터의 가장 가까운 복제본 세트 멤버에서 읽습니다.
기본적으로 드라이버는 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 local_threshold 옵션을 Mongo::Client 생성자에 전달합니다.
다음 예에서는 로컬 임계값을 35 밀리초로 지정합니다.
client = Mongo::Client.new( ['IP_ADDRESS_001:27017'], database: 'test_database', read: { mode: :secondary_preferred }, local_threshold: 35 ) database = client.database collection = database[:example_collection] result = collection.find({}).first puts result
앞의 예시 에서 Ruby 운전자 가장 가까운 멤버의 핑 시간 35 밀리초 내에 일치하는 멤버 간에 읽기를 분산합니다.
참고
Ruby 운전자 mongos 인스턴스 를 통해 복제본 세트 와 통신할 때 local_threshold 값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.