문서 메뉴

문서 홈애플리케이션 개발MongoDB 드라이버Ruby MongoDB Driver

컬렉션

이 페이지의 내용

  • Time Series 컬렉션
  • 고정 사이즈 컬렉션
  • 기존 컬렉션을 고정 사이즈 컬렉션으로 변환
  • 문서 유효성 검사
  • 기존 collection에 유효성 검사 추가
  • collection 나열
  • collection 삭제

MongoDB는 문서를 collection에 저장합니다. 컬렉션이 존재하지 않는 경우, 해당 컬렉션에 문서를 처음 삽입할 때 MongoDB가 컬렉션을 생성합니다.

최대 크기 설정 또는 문서 유효성 검사 규칙 설정과 같은 다양한 옵션을 사용하여 collection을 명시적으로 생성할 수도 있습니다.

시계열 컬렉션이 MongoDB 5 에 추가되었습니다.0. 여기에서 설명서를 읽을 수 있습니다.

time series 컬렉션은 일정 기간 동안의 측정 시퀀스를 효율적으로 저장합니다. time-series 데이터는 시간이 지남에 따라 수집되며 하나 이상의 변경되지 않는 매개 변수로 고유하게 식별되는 모든 데이터입니다. Time Series 데이터를 식별하는 불변의 매개변수는 일반적으로 데이터 소스의 메타데이터입니다.

time series 컬렉션을 만들려면 time series 옵션을 사용하여 명시적으로 컬렉션을 만들어야 합니다.

opts = {
time_series: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
},
expire_after: 604800
}
db['weather', opts].create

time series 컬렉션을 만들 때 다음 옵션을 지정합니다.

필드
설명
time_series[:timeField]
필수 사항입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다.
time_series[:metaField]
선택 사항입니다. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다.
time_series[:granularity]
선택 사항. 가능한 값은 '초', '분', '시간'입니다. 기본적으로 MongoDB는 고빈도 수집에 대해 세분성을 '초'로 설정합니다.
:expireAfterSeconds
선택 사항입니다. 문서가 만료되기 전까지의 시간(초)을 지정하여 Time Series 컬렉션 문서를 자동으로 삭제할 수 있습니다. MongoDB는 만료된 문서를 자동으로 삭제합니다.

Time Series 컬렉션 옵션에 대한 자세한 내용은 MongoDB 문서 를 참조하세요.

time series 컬렉션에 삽입하는 것은 일반 collection에 삽입하는 것과 유사합니다.

db['weather'].insert_many([
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 18, 0, 0, 0),
temp: 12
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 18, 4, 0, 0),
temp: 11
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 18, 8, 0, 0),
temp: 11
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 18, 12, 0, 0),
temp: 12
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 18, 16, 0, 0),
temp: 16
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 18, 20, 0, 0),
temp: 15
}, {
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 19, 0, 0, 0),
temp: 13
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 19, 4, 0, 0),
temp: 12
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 19, 8, 0, 0),
temp: 11
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 19, 12, 0, 0),
temp: 12
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 19, 16, 0, 0),
temp: 17
},
{
metadata: { sensorId: 5578, type: "temperature" },
timestamp: Time.utc(2021, 5, 19, 20, 0, 0),
temp: 12
}
])

time series 컬렉션을 쿼리하는 것도 일반 컬렉션과 매우 유사합니다.

weather.find(timestamp: Time.utc(2021, 5, 18, 0, 0, 0)).first

이 쿼리의 결과는 다음과 같습니다.

{
"timestamp" => 2021-05-18 00:00:00 UTC,
"metadata" => {
"sensorId" => 5578,
"type" => "temperature"
},
"temp" => 12,
"_id" => BSON::ObjectId('624dfb87d1327a60aeb048d2')
}

집계 파이프라인은 추가 쿼리 기능에도 사용할 수 있습니다.

weather.aggregate([
{
"$project": {
date: {
"$dateToParts": { date: "$timestamp" }
},
temp: 1
}
},
{
"$group": {
_id: {
date: {
year: "$date.year",
month: "$date.month",
day: "$date.day"
}
},
avgTmp: { "$avg": "$temp" }
}
}
]).to_a

예시된 aggregation pipeline은 모든 문서를 측정 날짜별로 그룹화한 다음, 해당 날짜의 모든 온도 측정값의 평균을 반환합니다.

[{
"_id" => {
"date" => {
"year" => 2021,
"month" => 5,
"day" => 18
}
},
"avgTmp" => 12.833333333333334
},
{
"_id" => {
"date" => {
"year" => 2021,
"month" => 5,
"day" => 19
}
},
"avgTmp" => 12.833333333333334
}]

자세한 내용은 time series 컬렉션 에 대한 MongoDB 설명서를 참조하세요.

고정 사이즈 컬렉션에는 최대 크기 또는 문서 수가 정해져 있어 최대 임곗값을 초과하여 늘어나는 것을 방지합니다. 모든 고정 사이즈 컬렉션은 최대 크기를 지정해야 하며 최대 문서 수를 지정할 수도 있습니다. MongoDB는 컬렉션이 최대 문서 수에 도달하기 전에 최대 크기 제한에 도달하는 경우 오래된 문서를 제거합니다.

고정 사이즈 컬렉션 을 만들려면 바이트 단위의 size 와 함께 capped: true 옵션을 사용합니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'music')
collection = client[:artists, capped: true, size: 10000]
collection.create
collection.capped? # => true

기존 컬렉션을 비고정 사이즈 컬렉션에서 고정 사이즈 컬렉션으로 변환하려면 convertToCapped 명령을 사용합니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'music')
db = client.database
db.command({ 'convertToCapped' => 'artists', 'size' => 10000 })

MongoDB 버전 3 을(를) 사용하는 경우.2 이상에서는 문서 유효성 검사 를 사용할 수 있습니다. 유효성 검사 기능이 있는 컬렉션은 삽입되거나 업데이트된 각 문서를 유효성 검사기 옵션에 지정된 기준과 비교합니다. validationLevelvalidationAction 에 따라 MongoDB는 경고를 반환하거나 지정된 기준을 충족하지 못하는 경우 문서 삽입 또는 업데이트를 거부합니다.

다음 예에서는 contacts 삽입되거나 업데이트된 문서가 다음 세 가지 조건 중 하나 이상과 일치하도록 지정하는 유효성 검사기가 있는 collection을 만듭니다.

  • phone 필드는 문자열입니다.

  • email 필드가 정규 표현식과 일치합니다.

  • status 필드가 Unknown 또는 Incomplete 입니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
client[:contacts,
{
'validator' => { '$or' =>
[
{ 'phone' => { '$type' => "string" } },
{ 'email' => { '$regex' => /@mongodb\.com$/ } },
{ 'status' => { '$in' => [ "Unknown", "Incomplete" ] } }
]
}
}
].create

기존 collection에 문서 유효성 검사 기준을 추가하려면 collMod 명령을 사용합니다. 아래 예에서는 contacts collection에 유효성 검사를 추가하여 모든 새 문서에 숫자인 age 필드가 포함되도록 하는 방법을 보여 줍니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
db = client.database
db.command({ 'collMod' => 'contacts',
'validator' =>
{ 'age' =>
{ '$type' => "number" }
}
})

데이터베이스 객체에서 collections 또는 collection_names 메서드를 사용하여 컬렉션을 나열합니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'music')
database = client.database
database.collections # Returns an array of Collection objects.
database.collection_names # Returns an array of collection names as strings.

컬렉션을 삭제하려면 collection 객체에서 drop 을 호출합니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'music')
artists = client[:artists]
artists.drop
← 데이터베이스