AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

다양한 스키마 버전 유지 관리

애플리케이션의 스키마 요구 사항은 시간이 지남에 따라 변경될 수 있습니다. 예를 들어, 새로운 서비스를 사용할 수 있게 되면 문서에 새 필드를 추가해야 할 수도 있습니다. MongoDB의 유연한 데이터 모델은 컬렉션 전체에서 균일하지 않은 문서 구조를 사용할 수 있으며, 업데이트된 스키마와 함께 이전 문서 구조를 유지할 수 있다는 것을 의미합니다.

스키마 버전 관리 패턴을 사용하면 동일한 collection에 여러 버전의 스키마를 보유할 수 있으므로 요구 사항이 변경될 때 대규모 스키마 마이그레이션을 피할 수 있습니다.

문서에서 여러 레벨에 나타나는 필드가 있는 경우 스키마 버전 관리 패턴이 인덱스에 영향을 줄 수 있습니다. 예를 들어 동일한 필드를 최상위 필드 및 다른 문서의 임베디드 필드로 저장하는 경우 해당 필드에 대한 쿼리를 지원하기 위해 여러 인덱스가 필요할 수 있습니다.

다음 예시에서는 온라인 스토어에서 컬렉션을 사용하여 고객 연락처 정보를 추적합니다. 처음에는 집 전화번호와 직장 전화번호만 컬렉션에 포함됩니다. 시간이 지남에 따라 새로운 연락 방법이 추가되고 일부 이전 방법은 더 이상 필요하지 않습니다.

샘플 문서 삽입:

db.contacts.insertOne( { _id: 1, name: "Taylor", home: "209-555-7788", work: "503-555-0110" })

다음 절차에서는 컬렉션의 초기 스키마 버전을 설정한 다음 다른 스키마로 새 문서를 삽입합니다.

1

컬렉션의 여러 스키마를 구분하려면 schemaVersion 필드를 추가합니다.

다음 명령은 초기 스키마가 있는 문서에 1 값이 있는 schemaVersion 필드를 추가합니다.

db.contacts.updateMany( { }, { $set: { schemaVersion: 1 } })
2

업데이트된 스키마에서 고객은 자신의 소셜 미디어 계정을 연결할 수 있습니다. 새 요구 사항을 설명하고 schemaVersion이 2인 문서를 삽입합니다.

db.contacts.insertOne( { _id: 2, schemaVersion: 2, name: "Cameron", contactInfo: { cell: "903-555-1122", work: "670-555-7878", instagram: "@camcam9090", linkedIn: "CameronSmith123" } })

스키마 버전 관리 패턴을 구현한 후에는 애플리케이션에서 데이터를 쿼리하고 업데이트하는 방법을 수정해야 합니다.

이제 contacts 컬렉션에는 서로 다른 두 개의 스키마가 있으므로 쿼리는 문서의 스키마 버전에 따라 필드 값의 가능한 모든 위치를 확인해야 합니다.

다음 쿼리는 고객의 work 번호를 기반으로 검색합니다. 쿼리는 work 필드의 가능한 두 위치를 모두 확인합니다.

db.contacts.find( { $or: [ { work: "503-555-0110" }, { "contactInfo.work": "503-555-0110" } ] })

출력:

{ _id: 1, name: 'Taylor', home: '209-555-7788', work: '503-555-0110', schemaVersion: 1}

데이터 삽입과 마찬가지로 컬렉션을 업데이트할 때 애플리케이션은 업데이트할 필드의 가능한 모든 위치를 확인해야 합니다. 데이터를 업데이트할 때 schemaVersion 필드를 사용하여 업데이트할 필드를 결정할 수 있습니다.

사용자 _id: 2의work 전화번호를 업데이트하려면 다음 명령을 실행하세요.

db.contacts.updateOne( { _id: 2 }, [ { $set: { "work": { $cond: { if: { $eq: [ "$schemaVersion", 1 ] }, then: "999-999-9999", else: null } }, "contactInfo.work": { $cond: { if: { $eq: [ "$schemaVersion", 2 ] }, then: "999-999-9999", else: null } } } } ])

이전 예제의 경우:

  • 일치하는 문서의 schemaVersion(이)가 1인 경우 work 필드가 업데이트된 값으로 설정됩니다.

  • 일치하는 문서의 schemaVersion(이)가 2인 경우 contactInfo.work 필드가 업데이트된 값으로 설정됩니다.