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

자동 임베딩 작동 방식

클러스터 의 텍스트 데이터에 대한 벡터 임베딩을 자동으로 생성하고 관리 MongoDB Vector Search를 구성할 수 있습니다. 클러스터 에서 원클릭 AI 시맨틱 검색 인덱스 생성하고 Voyage AI 임베딩 모델을 사용하여 벡터를 사용한 인덱싱, 업데이트 및 쿼리를 간소화할 수 있습니다.

자동 임베딩을 활성화 하면 MongoDB 벡터 검색은 컬렉션 의 지정된 텍스트 필드 에 대한 인덱스 타임과 자동화된 임베딩을 위해 인덱싱된 필드 에 대한 쿼리 의 텍스트 string 쿼리 타임에 지정된 embedding model을 사용하여 임베딩을 자동으로 생성합니다.

자동 임베딩을 위한 MongoDB Vector Search 인덱스 생성하는 경우, MongoDB 초기 동기화를 수행하여 컬렉션 의 모든 기존 문서에 대한 임베딩을 생성합니다.

  1. 문서를 스캔합니다.

    MongoDB Vector Search는 인덱스된 텍스트 필드 포함하는 컬렉션 의 모든 문서를 스캔합니다.

  2. 임베딩을 생성합니다.

    각 document 에 대해 MongoDB 벡터 검색는 인덱싱된 필드 의 텍스트를 Voyage AI embedding model로 전송하여 vector embeddings를 생성합니다.

  3. 임베딩을 저장합니다.

    MongoDB Vector Search는 생성된 임베딩을 동일한 클러스터 의 별도의 내부 시스템 컬렉션 (__mdb_internal_search)에 저장하여 데이터 지역성을 유지하면서 임베딩을 애플리케이션 데이터와 격리된 상태로 유지합니다.

  4. 인덱스 생성.

    임베딩이 생성된 후 MongoDB Vector Search는 생성된 임베딩을 사용하여 인덱스 를 빌드하여 벡터 검색 활성화 합니다.

초기 동기화 중에 MongoDB 문서를 배치로 처리하고 특수 Flex 추론 처리 계층 사용하여 처리량 최적화합니다.

참고

초기 동기화 기간은 document 수, 인덱스된 필드 의 텍스트 길이, 사용 가능한 속도 제한 할당량에 따라 달라집니다. 대규모 컬렉션의 경우 초기 동기화 완료하는 데 몇 시간이 걸릴 수 있습니다.

초기 동기화 후 MongoDB Vector Search는 임베딩이 변경될 때 데이터와 자동으로 동기화된 상태를 유지합니다.

인덱스된 텍스트 필드 가 있는 새 document 삽입하면 MongoDB 벡터 검색은 자동으로 다음을 수행합니다.

  1. 변경 스트림을 통해 새 document 감지합니다.

  2. 구성된 모델을 사용하여 텍스트 필드 에 대한 임베딩을 생성합니다.

  3. 시스템 컬렉션 에 임베딩을 저장합니다.

  4. 새로운 임베딩을 포함하도록 MongoDB Vector Search 인덱스 업데이트합니다.

document 업데이트 인덱스 텍스트 필드 변경되면 MongoDB 벡터 검색는 자동으로 다음을 수행합니다.

  1. 변경 스트림을 통해 필드 변경을 감지합니다.

  2. 업데이트된 텍스트에 대한 새 임베딩을 생성합니다.

  3. 시스템 컬렉션 의 이전 임베딩을 대체합니다.

  4. 새로운 임베딩으로 MongoDB 벡터 검색 인덱스 업데이트합니다.

참고

MongoDB Vector Search는 자동 임베딩을 위해 인덱싱되지 않은 필드에 대한 업데이트에 대해 임베딩 재생성을 트리거하다 하지 않습니다.

document 삭제 하면 MongoDB 벡터 검색는 시스템 컬렉션 에서 해당 임베딩을 자동으로 제거하고 인덱스 를 업데이트합니다.

자동 임베딩은 멀티 테넌트 환경에서 MongoDB 가 호스팅하고 managed Voyage AI의 임베딩 모델을 사용합니다.

  • 호스팅 서비스: 모든 임베딩 모델은 MongoDB 에서 호스팅하고 유지 관리합니다. 모델 추론 플랫폼은 미국 리전 의 Google Cloud 클라우드 에 있는 MongoDB 인프라에서 실행됩니다. model 인프라를 배포, 구성 또는 관리 필요가 없습니다.

  • API 기반 액세스: Voyage AI API 키를 사용하도록 구성된 자체 관리형 배포서버의 경우, MongoDB Voyage AI의 API 엔드포인트에 텍스트를 전송하여 임베딩을 생성합니다. 임베딩은 MongoDB 로 반환되어 클러스터 에 저장됩니다.

  • 멀티 테넌트 아키텍처: 임베딩 서비스는 여러 사용자가 공유합니다. 이 멀티테넌트 모델은 다음을 제공합니다.

    • 공유 인프라를 통한 비용 효율성

    • Automatic model 업데이트 및 개선

    • 고가용성 및 확장성

  • 자동 임베딩 서비스로 전송된 텍스트는 임베딩을 생성하는 데만 사용되며 model 교육 에 저장되거나 사용되지 않습니다.

  • 임베딩은 MongoDB 클러스터 로 반환되어 자체 데이터베이스 내에 저장됩니다.

  • 자동 임베딩 서비스와의 모든 통신은 암호화됨 연결을 통해 이루어집니다.

임베딩 서비스는 멀티 테넌트입니다. 따라서 MongoDB 모든 고객이 공정하게 사용할 수 있도록 요금 제한을 적용합니다. 속도 제한과 이 제한이 자동 임베딩 작업에 미치는 영향에 대해 자세히 학습하려면 속도 제한을 참조하세요.

자동 임베딩을 사용하여 벡터 검색 쿼리 실행 MongoDB 쿼리 텍스트에 대한 임베딩 생성을 자동으로 처리합니다.

  1. 쿼리 string 제출: 미리 생성된 벡터 대신 $vectorSearch 단계의 query 필드에 string을 제공합니다.

  2. 임베딩 생성: MongoDB 쿼리 텍스트를 자동 임베딩 서비스로 전송하여 인덱스에 지정된 동일한 model(또는 model 옵션으로 재정의하는 경우 호환되는 model)을 사용하여 임베딩을 생성합니다.

  3. 벡터 검색: 생성된 쿼리 임베딩은 구성된 유사성 함수(코사인, dotProduct 또는 유클리드)를 사용하여 인덱싱된 임베딩을 검색 데 사용됩니다.

  4. 반환된 결과: MongoDB 쿼리 와의 유사성을 기준으로 순위가 매겨진 문서를 반환합니다.

자동 임베딩을 사용하는 각 쿼리 임베딩을 생성하기 위해 API 호출이 필요하므로 자동 임베딩 속도 제한에 포함됩니다. 쿼리 처리량 및 비용 관리에 대해 자세히 학습하려면 속도 제한을 참조하세요.

  • 대규모 컬렉션은 속도 제한에 도달하면 초기 동기화 완료하는 데 상당한 시간이 걸릴 수 있습니다.

  • MongoDB 실패한 임베딩 요청을 자동으로 재시도하고 지수 백오프를 구현합니다.

  • 검색 모니터링을 통해 동기화 진행 상태를 모니터링할 수 있습니다.

  • document 업데이트는 속도 제한이 적용되는 대로 처리됩니다.

  • 업데이트가 속도 제한을 초과하는 경우 용량 사용할 수 있게 되면 대기열에 추가되어 처리됩니다.

  • 애플리케이션 계속 정상적으로 작동합니다. 임베딩 생성만 지연될 수 있습니다.

  • 쿼리 속도 제한은 수행할 수 있는 동시 검색 수에 영향을 줍니다.

  • 쿼리 속도 제한을 초과하는 경우 쿼리는 속도 제한을 초과했음을 나타내는 오류를 반환합니다.

  • 자주 사용하는 쿼리 결과를 캐싱하거나 처리량 높이려면 유료 계층 으로 업그레이드하는 것이 좋습니다.

자동 임베딩은 별도의 예비 데이터베이스 사용하여 벡터 임베딩을 저장 . 인덱스 에 대해 생성된 임베딩 컬렉션 찾고 생성된 임베딩 컬렉션 에서 임베딩을 조회할 수 있습니다.

임베딩 저장

MongoDB 생성된 임베딩을 비동기적으로 저장하고 내부에서 생성된 임베딩 컬렉션 에 유지합니다. 이 생성된 임베딩 컬렉션 동일한 클러스터 의 __mdb_internal_search 이라는 전용 내부 데이터베이스 에 존재합니다. 클러스터 의 모든 자동 임베딩 인덱스 이 데이터베이스 내에 해당하는 생성된 임베딩 컬렉션 정확히 하나만 있습니다. 자세한 학습은 생성된 임베딩 컬렉션을 참조하세요.

경고

__mdb_internal_search 데이터베이스 는 MongoDB 에서 만들고 managed 예약된 내부 네임스페이스 입니다. 이 데이터베이스 또는 해당 컬렉션을 조작하지 마세요. 이 예약된 네임스페이스 수정하면 인덱스 실패 및 일관되지 않은 검색 결과가 발생할 수 있습니다.

생성된 임베딩 컬렉션의 구조

생성된 임베딩 컬렉션 소스 컬렉션 document 당 하나의 document 포함되어 있습니다. 생성된 각 임베딩 컬렉션 document 소스와 동일한 _id, 소스의 필터 필드 사본, 각 자동 임베딩 필드 에 대해 생성된 임베딩 벡터가 있습니다.

다음 필드를 볼 수 있습니다.

필드
유형
설명

_id

ObjectId

Same _id as the source document.

<filter-field>

Any

소스 document 에서 필터 필드 의 복사본입니다.

_autoEmbed

객체

각 자동 임베딩 필드 에 대한 임베딩 벡터를 포함합니다.

_autoEmbed.
<fieldPath>

float 또는 양자화된 벡터의 배열

자동화된 임베딩 필드 에 대해 생성된 임베딩 벡터를 포함합니다.

경고

__mdb_internal_search 데이터베이스 는 MongoDB 에서 만들고 managed 예약된 내부 네임스페이스 입니다. 이 데이터베이스 또는 해당 컬렉션을 조작하지 마세요. 이 예약된 네임스페이스 수정하면 인덱스 실패 및 일관되지 않은 검색 결과가 발생할 수 있습니다.

mongosh 사용하여 자동 임베딩 인덱스 에 대해 생성된 임베딩 컬렉션 찾습니다.

1
2

다음 자리 표시자를 바꾼 후 다음 쿼리 실행합니다.

  • <database_name> - 자동 임베딩 인덱스 포함된 데이터베이스 의 이름입니다.

  • <collection_name> - 자동 임베딩 인덱스 포함된 컬렉션 의 이름입니다.

  • <index_name> - 자동 임베딩 인덱스 의 이름입니다.

예시: 자동 임베딩 인덱스 의 ID 가져오기
1use <database_name>
2db.<collection_name>.aggregate( [ { $listSearchIndexes: { name: "<index_name>" } } ] )
예시: 자동 임베딩 인덱스 의 ID 가져오기
1[
2 {
3 id: '69f382ecd6fa583100184fe7',
4 name: 'auto-embed-index',
5 type: 'vectorSearch',
6 status: 'READY',
7 numDocs: 0,
8 latestDefinition: { ... },
9 statusDetail: [ ... ]
10 }
11]
3

<index_id> 를 이전 단계의 명령이 반환한 자동 임베딩 인덱스 의 ID 로 바꾼 후 다음 쿼리 실행합니다.

예시: 생성된 임베딩 컬렉션 가져오기
1use __mdb_internal_search
2db.getCollectionNames().filter(n => n.startsWith("<index_id>"))
예시: 생성된 임베딩 컬렉션 가져오기
[ '69f382ecd6fa583100184fe7-96dad03b0a735a19fd9f1a22f9694efc-1-0' ]

출력은 생성된 임베딩 컬렉션 의 이름입니다.

mongosh 사용하여 자동 임베딩 인덱스 에 대해 생성된 임베딩 컬렉션 의 document 수를 찾습니다.

1
2

다음 자리 표시자를 바꾼 후 다음 쿼리 실행합니다.

  • <generated_embeddings_collection_name> - 생성된 임베딩 컬렉션 의 이름입니다.
예시: 생성된 document 수 확인
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).countDocuments()
예시: 생성된 document 수 확인
1100

생성된 임베딩 컬렉션의 저장 크기를 확인하여 생성된 임베딩에서 디스크 및 인덱스 공간 사용량을 파악할 수 있습니다. 이는 용량 계획, 예기치 않은 증가 디버깅, 인덱스 삭제 또는 재정의 후 정리 유효성 검사에 유용합니다.

중요

저장 크기를 확인하기 전에 생성된 임베딩 컬렉션 이름을 찾습니다. 자세한 학습은 생성된 임베딩 컬렉션 찾기를 참조하세요.

``mongosh``를 사용하여 생성된 임베딩 컬렉션의 저장 크기를 찾습니다.

1
2

<generated_embeddings_collection_name> 를 생성된 임베딩 컬렉션 의 이름으로 바꾼 후 다음 쿼리 실행합니다.

예시: 생성된 임베딩 컬렉션 의 저장 크기 확인
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).stats()

collStats 명령은 생성된 임베딩 컬렉션에 대한 자세한 저장 지표 제공합니다. 스크립트 액세스, 샤드 클러스터 집계 또는 예약된 모니터링 필요한 경우 이 접근 방식을 사용합니다.

다음 collStats 필드는 저장 정보를 제공합니다.

필드
설명

count

생성된 임베딩 컬렉션 의 document 수입니다. 생성된 임베딩이 있는 각 소스 document 당 하나의 document 존재합니다.

size

모든 문서의 압축되지 않은 논리적 크기(바이트)입니다.

storageSize

WiredTiger 압축 후 컬렉션 데이터 파일의 디스크 크기(바이트)입니다.

totalIndexSize

생성된 임베딩 컬렉션 에 있는 모든 MongoDB 인덱스의 디스크 크기(바이트)입니다.

totalSize

storageSizetotalIndexSize의 합계입니다. 총 디스크 사용량을 나타냅니다.

avgObjSize

Average uncompressed document size. per-document 임베딩 크기를 검증하는 데 유용합니다.

참고

  • storageSizetotalIndexSize 은 실제 디스크 사용량을 반영합니다.

  • size 는 압축되지 않은 논리적 뷰이며 일반적으로 더 큽니다.

  • 이 지표 MongoDB 클러스터 의 저장 만 표시합니다. 여기에는 mongot 호스팅하다 의 루센 벡터 인덱스 에 사용되는 디스크가 포함되지 않습니다.

mongosh 또는 PyMongo 사용하여 복제본 세트 에서 생성된 임베딩 컬렉션 의 저장 크기를 확인합니다.

__mdb_internal_search 데이터베이스 대해 다음 명령을 실행합니다.

1use __mdb_internal_search
2
3const mvColl = "<generated_embeddings_collection_name>";
4
5db.runCommand({ collStats: mvColl }).count
6db.runCommand({ collStats: mvColl, scale: 1024 * 1024 })
1{
2 ns: '__mdb_internal_search.69f382ecd6fa583100184fe7-96dad03b0a735a19fd9f1a22f9694efc-1-0',
3 size: 5142,
4 count: 1250000,
5 avgObjSize: 4312,
6 numOrphanDocs: 0,
7 storageSize: 1830,
8 freeStorageSize: 7,
9 capped: false,
10 wiredTiger: { ... },
11 nindexes: 1,
12 indexDetails: { ... },
13 indexBuilds: [],
14 totalIndexSize: 42,
15 indexSizes: { _id_: 0 },
16 totalSize: 1872,
17 scaleFactor: 1048576,
18 ok: 1,
19 '$clusterTime': {
20 clusterTime: Timestamp({ t: 1777646199, i: 1 }),
21 signature: {
22 hash: Binary.createFromBase64('pomqluUIpiZzLro3VWhO4dt2LKE=', 0),
23 keyId: Long('7634583163557117960')
24 }
25 },
26 operationTime: Timestamp({ t: 1777646199, i: 1 })
27}

형식이 지정된 요약을 보려면 실행.

1const s = db.runCommand({ collStats: mvColl, scale: 1024 * 1024 });
2({
3 count: s.count,
4 avgObjSizeKB: (s.avgObjSize / 1024).toFixed(2),
5 dataMB: s.size,
6 storageMB: s.storageSize,
7 indexesMB: s.totalIndexSize,
8 totalMB: s.totalSize,
9})
1{
2 "count": 1250000,
3 "avgObjSizeKB": "4.21",
4 "dataMB": 5142,
5 "storageMB": 1830,
6 "indexesMB": 42,
7 "totalMB": 1872
8}
1from pymongo import MongoClient
2
3MV_DATABASE = "__mdb_internal_search"
4MB = 1024 * 1024
5
6def get_mv_storage_stats(client, mv_collection_name):
7 """Return storage metrics for a generated embeddings collection."""
8 db = client[MV_DATABASE]
9 stats = db.command("collStats", mv_collection_name, scale=MB)
10 return {
11 "count": stats["count"],
12 "avg_obj_kb": round(stats["avgObjSize"] / 1024, 2),
13 "data_mb": stats["size"],
14 "storage_mb": stats["storageSize"],
15 "indexes_mb": stats["totalIndexSize"],
16 "total_mb": stats["totalSize"],
17 }
18
19client = MongoClient("mongodb+srv://<user>:<pwd>@<cluster>/")
20print(get_mv_storage_stats(client, "<generated_embeddings_collection_name>"))

샘플 출력:

{'count': 1250000, 'avg_obj_kb': 4.21, 'data_mb': 5142, 'storage_mb': 1830, 'indexes_mb': 42, 'total_mb': 1872}

각 샤드 쿼리하여 클러스터 전체 저장 지표 가져옵니다.

샤딩된 소스 컬렉션에서 각 샤드 __mdb_internal_search 데이터베이스 에 자체 생성된 임베딩 컬렉션 있습니다. mongos 는 이러한 컬렉션을 볼 수 없으므로 각 샤드의 mongod 를 직접 쿼리 하고 결과를 합산해야 합니다.

1

다음 명령을 실행하여 모든 샤드를 나열합니다.

db.adminCommand({ listShards: 1 })
2

각 샤드 에 대해 해당 복제본 세트 에 직접 연결합니다.

3

해당 샤드 에서 생성된 임베딩 컬렉션 에 대해 collStats 명령을 실행합니다.

4

클러스터 전체 합계를 얻으려면 모든 샤드에 count, storageSize, totalIndexSizetotalSize 를 추가합니다.

다음 스크립트 각 샤드 에 연결하고, 생성된 임베딩 컬렉션 쿼리하고, 샤드별 및 총 지표 반환합니다.

예시: 샤딩된 클러스터 의 저장 확인
1from pymongo import MongoClient
2
3MV_DATABASE = "__mdb_internal_search"
4MB = 1024 * 1024
5
6def _resolve_mv_name(client, source_db, source_collection, index_name):
7 """Find the generated embeddings collection name for an index."""
8 src = client[source_db][source_collection]
9 indexes = list(src.aggregate([{"$listSearchIndexes": {"name": index_name}}]))
10 if not indexes:
11 raise LookupError(f"No search index named {index_name!r}")
12 index_id = indexes[0]["id"]
13 matches = [n for n in client[MV_DATABASE].list_collection_names()
14 if n.startswith(index_id)]
15 if not matches:
16 return None
17 matches.sort(reverse=True)
18 return matches[0]
19
20def get_mv_storage_per_shard(shard_uris, source_db, source_collection, index_name):
21 """Get per-shard and total storage for a sharded cluster."""
22 per_shard = {}
23 totals = {"count": 0, "data_mb": 0, "storage_mb": 0,
24 "indexes_mb": 0, "total_mb": 0}
25
26 for shard_name, uri in shard_uris.items():
27 client = MongoClient(uri)
28 mv_name = _resolve_mv_name(client, source_db, source_collection, index_name)
29
30 if mv_name is None:
31 per_shard[shard_name] = {"note": "no MV found (still building?)"}
32 continue
33
34 s = client[MV_DATABASE].command("collStats", mv_name, scale=MB)
35 row = {
36 "mv": mv_name,
37 "count": s["count"],
38 "data_mb": s["size"],
39 "storage_mb": s["storageSize"],
40 "indexes_mb": s["totalIndexSize"],
41 "total_mb": s["totalSize"],
42 }
43 per_shard[shard_name] = row
44
45 for k in totals:
46 totals[k] += row[k]
47
48 return {"per_shard": per_shard, "totals": totals}
49
50# Usage
51shard_uris = {
52 "shard-00": "mongodb://<user>:<pwd>@shard-00.example.net:27017/?replicaSet=shard-00",
53 "shard-01": "mongodb://<user>:<pwd>@shard-01.example.net:27017/?replicaSet=shard-01",
54 "shard-02": "mongodb://<user>:<pwd>@shard-02.example.net:27017/?replicaSet=shard-02",
55}
56
57result = get_mv_storage_per_shard(
58 shard_uris,
59 source_db="<source_db>",
60 source_collection="<source_collection>",
61 index_name="<index_name>",
62)
63
64for shard, row in result["per_shard"].items():
65 print(shard, row)
66print("TOTAL:", result["totals"])
예시: 샤딩된 클러스터 의 저장 확인
shard-00 {'mv': '69e183...-1-3', 'count': 416000, 'data_mb': 1714, 'storage_mb': 612, 'indexes_mb': 14, 'total_mb': 626}
shard-01 {'mv': '69e183...-1-3', 'count': 418200, 'data_mb': 1721, 'storage_mb': 615, 'indexes_mb': 14, 'total_mb': 629}
shard-02 {'mv': '69e183...-1-3', 'count': 415800, 'data_mb': 1707, 'storage_mb': 603, 'indexes_mb': 14, 'total_mb': 617}
TOTAL: {'count': 1250000, 'data_mb': 5142, 'storage_mb': 1830, 'indexes_mb': 42, 'total_mb': 1872}

모든 인덱스에서 총 자동 임베딩 공간을 가져옵니다.

클러스터 의 모든 자동 임베딩 인덱스에 대한 저장 확인하려면 __mdb_internal_search의 모든 컬렉션 에 대해 collStats 을 합산합니다. 이는 용량 검토 및 분리된 생성 임베딩 컬렉션을 식별하는 데 유용합니다.

mongosh 에서 단일 복제본 세트 또는 샤딩된 클러스터의 각 샤드 에서 다음을 실행합니다.

1use __mdb_internal_search
2
3const MB = 1024 * 1024;
4const rows = db.getCollectionNames().map(name => {
5const s = db.runCommand({ collStats: name, scale: MB });
6return {
7 collection: name,
8 count: s.count,
9 storageMB: s.storageSize,
10 indexesMB: s.totalIndexSize,
11 totalMB: s.totalSize,
12};
13});
14
15const total = rows.reduce((a, r) => ({
16storageMB: a.storageMB + r.storageMB,
17indexesMB: a.indexesMB + r.indexesMB,
18totalMB: a.totalMB + r.totalMB,
19}), { storageMB: 0, indexesMB: 0, totalMB: 0 });
20
21print("Per-collection:");
22printjson(rows);
23print("Cluster total:");
24printjson(total);
1Per-collection:
2[
3 { "collection": "69e183...-1-3", "count": 1250000, "storageMB": 1830, "indexesMB": 42, "totalMB": 1872 },
4 { "collection": "71fa42...-1-1", "count": 84000, "storageMB": 121, "indexesMB": 3, "totalMB": 124 }
5]
6Cluster total:
7 { "storageMB": 1951, "indexesMB": 45, "totalMB": 1996 }
8}

참고

샤딩된 클러스터에서 각 샤드 에서 이 명령을 실행 하고 결과를 합산합니다.

mongosh 사용하여 생성된 임베딩 컬렉션 에서 임베딩을 조회 .

1
2

다음 자리 표시자를 바꾼 후 다음 쿼리 실행합니다.

  • <generated_embeddings_collection_name> - 생성된 임베딩 컬렉션 의 이름입니다.

  • <document_id> - 소스 컬렉션 에 있는 document 의 _id 입니다.

  • <auto_embed_field> - 자동 임베딩을 위해 인덱싱된 필드 의 이름입니다.

예시: 생성된 임베딩 컬렉션 에서 임베딩 조회
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).findOne(
4 { _id: "<document_id>" },
5 { _id: 1, "_autoEmbed.<auto_embed_field>": 1 }
6)
예시: 생성된 임베딩 컬렉션 에서 임베딩 조회
1[
2 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
3 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
4 {
5 _autoEmbed: {
6 fullplot: Binary.fromInt8Array(new Int8Array([
7 5, -30, 16, 4, -57, -8, -17, -13, 16, 11, -22, 15,
8 -7, 13, 8, -2, -1, -14, 27, 10, -9, 20, 14, -2,
9 3, -56, -21, 10, -24, 12, 10, 9, 12, 7, 4, 14,
10 -7, -24, -15, 16, 13, 21, -4, -16, -12, -15, 3, -33,
11 5, -21, 2, -1, 0, 16, 7, 13, 19, 4, 5, -14,
12 -34, 7, -16, 38, 4, 4, 7, -22, 8, 14, 15, -14,
13 -4, 6, 22, -17, 8, 27, 8, 13, 46, -12, -7, -9,
14 -20, 13, 10, 4, -14, -11, 31, -7, 0, -3, 1, 16,
15 9, 5, 6, -2,
16 ... 924 more items
17 ]))
18 },
19 _id: "ObjectId('573a1390f29313caabcd5c0f')"
20 },
21 {
22 _autoEmbed: {
23 fullplot: Binary.fromInt8Array(new Int8Array([
24 -5, -22, 22, -6, -43, -13, -5, 4, 5, 2, 4, 13,
25 0, -3, -3, -50, -5, -2, -2, 27, -5, 36, 27, 12,
26 -12, -6, -1, 9, -7, 25, 4, -28, 3, 9, 3, 23,
27 8, 11, 11, 25, -19, 27, 17, 18, -1, 0, 5, -12,
28 13, -5, -3, 3, -17, 16, -15, 43, -1, 1, 1, -6,
29 -26, 16, -11, 13, 14, 0, -9, -23, 25, -16, 11, -25,
30 7, 9, -1, 0, 33, -8, -3, -18, 3, 4, -20, -14,
31 17, -2, -2, -10, 17, -25, -11, 9, 1, 2, -8, 7,
32 20, 18, 17, -2,
33 ... 924 more items
34 ]))
35 },
36 _id: "ObjectId('573a1390f29313caabcd5c0f')"
37 },
38 {
39 _autoEmbed: {
40 fullplot: Binary.fromInt8Array(new Int8Array([
41 0, -1, 47, 6, -20, -14, 29, -2, 13, -1, 20, 11,
42 -18, -7, 12, -10, -25, 10, 7, -15, 11, 9, -14, 12,
43 -9, -22, 16, 0, 18, 5, 9, -26, 14, -27, 6, 20,
44 -19, -8, 1, -5, 21, 13, -37, -7, 0, -21, -51, 1,
45 -38, -14, 4, 6, -23, 15, 19, 33, 8, 0, -7, -3,
46 -25, 8, -29, 25, -1, 12, 4, -21, -1, 0, -14, -3,
47 -6, -3, 7, 30, 8, -8, 34, -19, -12, -29, -15, -14,
48 1, -4, 6, -2, -36, -18, -2, 4, 23, 17, -13, 1,
49 0, 7, 25, -19,
50 ... 924 more items
51 ]))
52 },
53 _id: "ObjectId('573a1390f29313caabcd5c0f')"
54 }
55]

mongosh 사용하여 생성된 임베딩 컬렉션 에서 임베딩을 조회 .

1
2

다음 자리 표시자를 바꾼 후 다음 쿼리 실행합니다.

  • <generated_embeddings_collection_name> - 생성된 임베딩 컬렉션 의 이름입니다.

  • <document_id> - 소스 컬렉션 에 있는 document 의 _id 입니다.

  • <auto_embed_field> - 자동 임베딩을 위해 인덱싱된 필드 의 이름입니다.

  • <number_of_documents> - 반환할 document 수입니다.

예시: 생성된 임베딩 컬렉션 에서 임베딩 조회
1use __mdb_internal_search
2const mvColl = "<generated_embeddings_collection_name>"
3db.getCollection(mvColl).find(
4 {},
5 { _id: "<document_id>", "_autoEmbed.<auto_embed_field>": { $slice: 5 } }
6).limit(<number_of_documents>)
예시: 생성된 임베딩 컬렉션 에서 임베딩 조회
1[
2 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
3 { _autoEmbed: {}, _id: "ObjectId('573a1390f29313caabcd5c0f')" },
4 {
5 _autoEmbed: {
6 fullplot: Binary.fromInt8Array(new Int8Array([
7 5, -30, 16, 4, -57, -8, -17, -13, 16, 11, -22, 15,
8 -7, 13, 8, -2, -1, -14, 27, 10, -9, 20, 14, -2,
9 3, -56, -21, 10, -24, 12, 10, 9, 12, 7, 4, 14,
10 -7, -24, -15, 16, 13, 21, -4, -16, -12, -15, 3, -33,
11 5, -21, 2, -1, 0, 16, 7, 13, 19, 4, 5, -14,
12 -34, 7, -16, 38, 4, 4, 7, -22, 8, 14, 15, -14,
13 -4, 6, 22, -17, 8, 27, 8, 13, 46, -12, -7, -9,
14 -20, 13, 10, 4, -14, -11, 31, -7, 0, -3, 1, 16,
15 9, 5, 6, -2,
16 ... 924 more items
17 ]))
18 },
19 _id: "ObjectId('573a1390f29313caabcd5c0f')"
20 },
21 {
22 _autoEmbed: {
23 fullplot: Binary.fromInt8Array(new Int8Array([
24 -5, -22, 22, -6, -43, -13, -5, 4, 5, 2, 4, 13,
25 0, -3, -3, -50, -5, -2, -2, 27, -5, 36, 27, 12,
26 -12, -6, -1, 9, -7, 25, 4, -28, 3, 9, 3, 23,
27 8, 11, 11, 25, -19, 27, 17, 18, -1, 0, 5, -12,
28 13, -5, -3, 3, -17, 16, -15, 43, -1, 1, 1, -6,
29 -26, 16, -11, 13, 14, 0, -9, -23, 25, -16, 11, -25,
30 7, 9, -1, 0, 33, -8, -3, -18, 3, 4, -20, -14,
31 17, -2, -2, -10, 17, -25, -11, 9, 1, 2, -8, 7,
32 20, 18, 17, -2,
33 ... 924 more items
34 ]))
35 },
36 _id: "ObjectId('573a1390f29313caabcd5c0f')"
37 },
38 {
39 _autoEmbed: {
40 fullplot: Binary.fromInt8Array(new Int8Array([
41 0, -1, 47, 6, -20, -14, 29, -2, 13, -1, 20, 11,
42 -18, -7, 12, -10, -25, 10, 7, -15, 11, 9, -14, 12,
43 -9, -22, 16, 0, 18, 5, 9, -26, 14, -27, 6, 20,
44 -19, -8, 1, -5, 21, 13, -37, -7, 0, -21, -51, 1,
45 -38, -14, 4, 6, -23, 15, 19, 33, 8, 0, -7, -3,
46 -25, 8, -29, 25, -1, 12, 4, -21, -1, 0, -14, -3,
47 -6, -3, 7, 30, 8, -8, 34, -19, -12, -29, -15, -14,
48 1, -4, 6, -2, -36, -18, -2, 4, 23, 17, -13, 1,
49 0, 7, 25, -19,
50 ... 924 more items
51 ]))
52 },
53 _id: "ObjectId('573a1390f29313caabcd5c0f')"
54 }
55]

PyMongo 사용하여 생성된 임베딩 컬렉션 에서 임베딩을 조회 .

생성된 임베딩 컬렉션 에서 임베딩을 조회 하려면 다음 Python 스크립트 사용할 수 있습니다. 스크립트 실행 하려면 PyMongo 드라이버설치합니다.

1
2
예시: 생성된 임베딩 컬렉션 에서 임베딩 조회
1from pymongo import MongoClient
2
3MV_DATABASE = "__mdb_internal_search"
4
5def get_mv_collection(client, source_db, source_collection, index_name):
6 """Resolve the MV collection for an auto-embedding index."""
7 # 1. Look up the index ID via $listSearchIndexes on the source collection.
8 src = client[source_db][source_collection]
9 indexes = list(src.aggregate([{"$listSearchIndexes": {"name": index_name}}]))
10 if not indexes:
11 raise LookupError(f"No search index named {index_name!r} on {source_db}.{source_collection}")
12 index_id = indexes[0]["id"]
13
14 # 2. Find the MV collection in __mdb_internal_search whose name starts with the index ID.
15 mv_db = client[MV_DATABASE]
16 matches = [n for n in mv_db.list_collection_names() if n.startswith(index_id)]
17 if not matches:
18 raise LookupError(f"No MV collection found for index {index_id} (index may still be building)")
19 if len(matches) > 1:
20 # Possible briefly during an auto-embed field update; pick the newest.
21 matches.sort(reverse=True)
22 return mv_db[matches[0]]
23
24def get_embedding(client, source_db, source_collection, index_name, embed_path, source_id):
25 """Fetch the embedding for a single source document."""
26 mv = get_mv_collection(client, source_db, source_collection, index_name)
27 doc = mv.find_one(
28 {"_id": source_id},
29 {"_id": 1, f"_autoEmbed.{embed_path}": 1},
30 )
31 if doc is None:
32 return None
33 return doc["_autoEmbed"][embed_path]
34
35# --- Usage ---
36client = MongoClient("mongodb+srv://<user>:<pwd>@<cluster>/")
37
38embedding = get_embedding(
39 client,
40 source_db="<source_db>",
41 source_collection="<source_collection>",
42 index_name="<auto_embed_index_name>",
43 embed_path="<auto_embed_field>",
44 source_id="<document_id>",
45)
46
47print(f"dims: {len(embedding)}")
48print(f"first 5: {embedding[:5]}")
3
자리 표시자
설명

<user>

MongoDB 배포서버 위한 사용자 이름.

<pwd>

MongoDB 배포서버 위한 비밀번호입니다.

<cluster>

MongoDB 배포서버 위한 클러스터 연결 문자열.

<source_db>

소스 컬렉션 이 포함된 데이터베이스 의 이름입니다.

<source_collection>

소스 컬렉션 의 이름입니다.

<index_name>

자동 임베딩 인덱스 의 이름입니다.

<source_id>

_id 소스 document 의 컬렉션 에 있는 .

<auto_embed_field>

자동 임베딩을 위해 인덱싱된 필드 의 이름입니다.

<number_of_documents>

반환할 document 수입니다.

4
python get_embedding.py

생성된 임베딩 컬렉션 에서 임베딩을 스트림 하려면 다음 Python 스크립트 사용할 수 있습니다.

1
2
예시: 생성된 임베딩 컬렉션 에서 임베딩 스트림
1from pymongo import MongoClient
2
3# --- Usage ---
4client = MongoClient("mongodb+srv://<user>:<pwd>@<cluster>/")
5
6mv = get_mv_collection(client, "<source_db>", "<source_collection>", "<auto_embed_index_name>")
7
8cursor = mv.find(
9 {},
10 {"_id": 1, "_autoEmbed.<auto_embed_field>": 1},
11 batch_size=500,
12)
13
14for doc in cursor:
15 src_id = doc["_id"]
16 vec = doc["_autoEmbed"]["<auto_embed_field>"]
3
자리 표시자
설명

<user>

MongoDB 배포서버 위한 사용자 이름.

<pwd>

MongoDB 배포서버 위한 비밀번호입니다.

<cluster>

MongoDB 배포서버 위한 클러스터 연결 문자열.

<source_db>

소스 컬렉션 이 포함된 데이터베이스 의 이름입니다.

<source_collection>

소스 컬렉션 의 이름입니다.

<auto_embed_index_name>

자동 임베딩 인덱스 의 이름입니다.

<auto_embed_field>

자동 임베딩을 위해 인덱싱된 필드 의 이름입니다.

4
python stream_embedding.py

다음 섹션에서는 자동 임베딩의 일반적인 문제를 해결하기 위한 지침 제공합니다.

인덱스 ID 와 일치하는 생성된 임베딩 컬렉션 없습니다.
인덱스가 여전히 Building 또는 Pending 상태일 수 있습니다. 생성된 임베딩 컬렉션은 첫 쓰기에 지연되어 만들어집니다. $listSearchIndexes를 사용하여 상태를 확인합니다.
document 누락 _id
지정된 document 에 대한 임베딩이 아직 생성되지 않았거나 document 인덱스의 필터 표현식 에 의해 필터링되었습니다.
인덱스 ID 와 일치하는 컬렉션 두 개 이상 있습니다.
자동 포함 필드 구성이 업데이트되었습니다. 새로 생성된 임베딩 컬렉션 생성되었지만 이전 임베딩 컬렉션은 정리될 때까지 잠시 남아 있을 수 있습니다.