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

와일드카드 인덱스 제한

이 페이지에서는 호환되지 않는 속성 및 지원되지 않는 쿼리 패턴과 같은 와일드카드 인덱스에 대한 제한 사항에 대해 설명합니다.

복합 와일드카드 인덱스 에는 다음과 같은 제한 사항이 있습니다.

  • 복합 와일드카드 인덱스에는 와일드카드 용어가 하나만 있을 수 있습니다.

    예를 예시, 다음 인덱스 는 지정할 수 없습니다.

    { userID: 1, "object1.$**": 1, "object2.$**": 1 }
  • 복합 와일드카드 인덱스 에서 와일드카드가 아닌 용어는 단일 키 용어여야 합니다. 멀티키 인덱스 텀은 허용되지 않습니다.

  • 와일드카드 필드 $**인 경우에만 wildcardProjection 옵션을 지정할 수 있습니다. 와일드카드 인덱스 텀 의 필드 경로 지정할 때는 wildcardProjection 를 사용할 수 없습니다.

    유효한 정의입니다.

    {
    key: { "$**": 1 },
    name: "index_all_with_projection",
    wildcardProjection: {
    "someFields.name": 1,
    "otherFields.values": 1
    }
    }

    이는 잘못된 정의입니다:

    {
    key: { "someFields.$**": 1 },
    name: "invalid_index",
    wildcardProjection: {
    "someFields.name": 1,
    "otherFields.values": 1
    }
    }
  • _id 필드는 기본적으로 생략됩니다. _id 필드가 필요한 경우:

    • 와일드카드 인덱스 $**로 지정합니다.

    • _id: 1를 사용하여 wildcardProjection_id 필드 포함합니다.

    db.studentGrades.createIndex(
    {
    "$**": 1,
    },
    {
    wildcardProjection: {
    _id: 1,
    exams: 1,
    extraCredit: 1
    }
    }
    )
  • 와일드카드 필드와 일반 필드에 동일한 필드 포함할 수 없습니다. 와일드카드 패턴 에서 필드를 제외하려면 제외 규칙과 함께 wildcardProjection 를 사용합니다.

    db.studentGrades.createIndex(
    {
    exams: 1,
    "$**": 1,
    homeworks: 1
    },
    {
    wildcardProjection: {
    exams: 0,
    homeworks: 0
    }
    }
    )

MongoDB 8.3 (및 8.2.4, 8.0.18, 7.0.29), 잘못된 구성을 방지하기 위해 복합 와일드카드 인덱스의 wildcardProjection 에 더 엄격한 유효성 검사 규칙이 적용 .

새로운 유효성 검사 요구 사항을 충족하지 않는 기존 인덱스는 계속 작동하지만 이러한 요구 사항을 충족하지 않는 새 인덱스를 만들 수는 없습니다.

복합 와일드카드 인덱스와 함께 wildcardProjection 을(를) 사용하는 경우 다음 규칙이 적용.

Rule
유효한 예시
잘못된 예시

wildcardProjection를 지정하는 경우 비워 둘 수 없습니다.

{ productId: 1, "$**": 1 },
{
wildcardProjection: {
attributes: 1
}
}
{ productId: 1, "$**": 1 },
{
wildcardProjection: { }
}

포함되거나 제외된 필드 _id인 경우에만 wildcardProjection 에서 포함과 제외를 결합할 수 있습니다. 포함 프로젝션에서 _id 를 제외하거나 제외 프로젝션에 _id 를 포함할 수 있습니다.

{ "$**": 1, category: 1 },
{
wildcardProjection: {
_id: 0,
attributes: 1
}
}
{ "$**": 1, category: 1 },
{
wildcardProjection: {
_id: 1,
metadata: 0
}
}
{ "$**": 1, category: 1 },
{
wildcardProjection: {
_id: 0,
price: 0,
stock: 1
}
}

wildcardProjection 에 포함된 필드는 일반(와일드카드가 아닌) 인덱스 필드와 겹치지 않아야 합니다.

{ userId: 1, "$**": 1 },
{
wildcardProjection: {
preferences: 1
}
}
{ userId: 1, "$**": 1 },
{
wildcardProjection: {
userId: 1
}
}

일반 인덱스 필드 도 _id인 경우에만 _id전용 제외를 지정할 수 있습니다.

{ _id: 1, "$**": 1 },
{
wildcardProjection: {
_id: 0
}
}
{ productId: 1, "$**": 1 },
{
wildcardProjection: {
_id: 0
}
}

wildcardProjection 이 제외인 경우 모든 일반 인덱스 필드를 제외해야 합니다.

{
userId: 1,
category: 1,
"$**": 1
},
{
wildcardProjection: {
userId: 0,
category: 0
}
}
{
userId: 1,
category: 1,
"$**": 1
},
{
wildcardProjection: {
userId: 0
}
}

와일드카드 인덱스는 다음 사항을 지원하지 않습니다.

와일드카드 인덱스는 희소 인덱스입니다. 인덱싱된 필드가 존재하지 않는 경우 쿼리를 지원하지 않습니다. 와일드카드 인덱스는 와일드카드 필드에 null 값이 있는 경우 문서를 인덱싱합니다.

MongoDB 7.0부터 와일드카드 인덱스는 오름차순(1) 및 내림차순(-1) 정렬 순서를 모두 지원합니다. 이전 버전에서는 오름차순만 지원했습니다.

와일드카드 구문($.**)을 사용하여 다음 인덱스 유형을 생성할 수 없습니다.

참고

명확화

와일드카드 인덱스 는 자체 관리 배포서버에서 와일드카드 텍스트 인덱스 생성 과 구별되며 와 호환되지 않습니다. 와일드카드 인덱스는 $text 연산자 를 사용하는 쿼리를 지원 수 없습니다.

와일드카드 인덱스 는 샤드 키 인덱스 로 사용할 수 없습니다.

와일드카드 인덱스는 기본적으로 _id 필드를 생략합니다. 와일드카드 인덱스에 _id 필드를 포함하려면 해당 필드를 wildcardProjection 문서에 명시적으로 포함해야 합니다.

{
"wildcardProjection": {
"_id": 1,
"<field>": 0|1
}
}

wildcardProjection 문서의 모든 명령문은 포함문 또는 제외문이어야 합니다. 제외문과 함께 _id 필드를 포함할 수도 있습니다. 이는 규칙의 유일한 예외입니다.

와일드카드 인덱스는 다음 쿼리 패턴을 지원 수 없습니다.

지정된 필드가 컬렉션 내 문서의 배열인 경우 와일드카드 인덱스는 해당 필드가 null 와(과) 같지 않은 문서에 대한 쿼리를 지원할 수 없습니다.

예를 들어 product_attributes 에 와일드카드 인덱스가 있는 inventory 컬렉션을 생각해 보겠습니다. 컬렉션의 문서에 product_attributes.tags 가 배열인 경우 와일드카드 인덱스는 다음 쿼리를 지원할 수 없습니다 .

db.inventory.find( { $ne : [ "product_attributes.tags", null ] } )
db.inventory.aggregate( [
{
$match : { $ne : [ "product_attributes.tags", null ] }
}
] )

와일드카드 인덱스는 문서 나 배열 자체가 아닌 문서 나 배열 의 내용에 대한 항목을 저장 합니다. 따라서 와일드카드 인덱스는 문서나 배열에서 정확한 동등성 매치를 지원 수 없습니다.

예를 예시 product_attributes 에 와일드카드 인덱스 가 있는 inventory 컬렉션 을 생각해 보겠습니다. 와일드카드 인덱스 는 다음 쿼리를 지원 수 없습니다.

db.inventory.find(
{
"product_attributes" : { "price" : 29.99 }
}
)
db.inventory.find(
{
"product_attributes.tags" : [ "waterproof", "fireproof" ]
}
)

참고

와일드카드 인덱스는 필드가 빈 문서 {} 인 쿼리를 지원할 수 있습니다 .

마찬가지로 와일드카드 인덱스는 문서와 배열에서 정확한 부등식 일치를 지원할 수 없습니다. 예를 들어 product_attributes 의 와일드카드 인덱스는 다음 쿼리를 지원할 수 없습니다.

db.inventory.aggregate( [
{
$match : {
$ne : [ "product_attributes", { "price" : 29.99 } ]
}
}
] )
db.inventory.aggregate( [
{
$match : {
$ne : [ "product_attributes.tags", [ "waterproof", "fireproof" ] ]
}
}
] )

와일드카드 인덱스는 희박 하며 빈 필드를 인덱스 하지 않습니다. 따라서 와일드카드 인덱스는 필드 가 존재하지 않는 문서에 대한 쿼리를 지원 수 없습니다.

예를 예시 product_attributes 에 와일드카드 인덱스 가 있는 inventory 컬렉션 을 생각해 보겠습니다. 와일드카드 인덱스 는 다음 쿼리를 지원 수 없습니다.

db.inventory.find(
{
"product_attributes" : { $exists : false }
}
)
db.inventory.aggregate( [
{
$match : {
"product_attributes" : { $exists : false }
}
}
] )

단일 와일드카드 인덱스 여러 쿼리 필드를 지원 수 있는 경우, MongoDB 쿼리 필드 중 하나를 지원 데 와일드카드 인덱스 만 사용할 수 있습니다.

예를 예시 product_attributes 에 와일드카드 인덱스 가 있는 inventory 컬렉션 을 생각해 보겠습니다. 와일드카드 인덱스 는 다음 쿼리 의 모든 조건자를 지원 수 없습니다.

db.inventory.find(
{
"product_attributes.price": { $gt: 20 },
"product_attributes.material": "silk",
"product_attributes.size": "large"
}
)

대신 MongoDB 와일드카드 인덱스 사용하여 쿼리 조건자 중 하나만 지원 . MongoDB 관련 와일드카드 인덱스 경로를 기반으로 지원 조건자를 자동으로 선택합니다. 지원되지 않는 쿼리 조건자는 rejectedPlans 에 설명 결과의 표시됩니다.

이는 복합 와일드카드 인덱스의 경우에도 마찬가지입니다. 복합 인덱스 의 와일드카드 텀 하나의 쿼리 술어만 지원 수 있지만, 와일드카드가 아닌 텀은 나머지 술어를 지원 수 있습니다.

참고

$or 동작

MongoDB 는 동일한 와일드카드 인덱스 를 사용하여 쿼리 $or 또는 집계 $or 연산자의 각 독립적인 인수를 지원 수 있습니다.

MongoDB는 다음 사항이 모두 참인 경우에만 를 충족하기 위해 와일드카드 인덱스를 사용할 수 있습니다. sort()

  • 쿼리 플래너는 쿼리 조건자를 충족하기 위해 와일드카드 인덱스를 선택합니다.

  • sort() 는 쿼리 조건자 필드 지정합니다.

  • 지정된 필드는 배열이 아닙니다.

위의 조건이 충족되지 않으면 MongoDB 는 정렬에 와일드카드 인덱스 를 사용할 수 없습니다. MongoDB 는 쿼리 술어의 인덱스와 다른 인덱스 가 필요한 sort() 작업을 지원 하지 않습니다.

products collection에 다음과 같은 와일드카드 인덱스가 있다고 가정해 봅시다.

db.products.createIndex( { "product_attributes.$**" : 1 } )

다음 작업은 단일 필드 product_attributes.price 를 쿼리하고 동일한 필드를 정렬합니다.

db.products.find(
{ "product_attributes.price" : { $gt : 10.00 } },
).sort(
{ "product_attributes.price" : 1 }
)

지정된 price 가 배열이 아니라고 가정하면 MongoDB는 product_attributes.$** 와일드카드 인덱스를 사용하여 find()sort() 을 모두 충족할 수 있습니다.