$meta
정의
$meta
문서와 관련된 메타데이터를 반환합니다(예: 텍스트 검색 시
"textScore"
).$meta
표현식의 구문은 다음과 같습니다.{ $meta: <metaDataKeyword> } $meta
표현식은 다음 값을<metaDataKeyword>
로 지정할 수 있습니다.Keyword설명"textScore"
일치하는 각 문서에 대한 해당
$text
쿼리와 연결된 점수를 반환합니다. 텍스트 점수는 문서가 검색어 또는 텀과 얼마나 일치하는지를 나타냅니다.{ $meta: "textScore" }
는$text
쿼리와 함께 사용해야 합니다.이전 버전에서는
$text
쿼리와 함께 사용되지 않으면 null 점수를 반환합니다.$text
이 페이지에서는 자체 관리형(Atlas에서 관리하지 않는) 배포를 위한 일반 텍스트 쿼리 기능을 제공합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우 MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다."indexKey"
텍스트가 아닌 인덱스를 사용하면 문서의 인덱스 키를 반환합니다.{ $meta: "indexKey" }
표현식은 디버깅 목적으로만 사용되고 애플리케이션 로직에는 사용되지 않으며cursor.returnKey()
보다 선호됩니다.MongoDB Atlas Search는 다음과 같은
$meta
키워드를 추가로 제공합니다."searchSequenceToken"(MongoDB 6.0.13 및 7.0.5부터 사용 가능)
자세한 내용은 Atlas Search 설명서를 참조하세요.
행동
텍스트 점수 메타데이터 $meta: "textScore"
$text 검색 필수
{ $meta: "textScore" }
표현식은$text
와 함께 사용해야 합니다. 예시:집계에서 앞으로의 단계에서
{ $meta: "textScore" }
표현식을 사용하려면 파이프라인에$text
쿼리가 있는$match
단계를 반드시 지정합니다.$match
단계에서$text
쿼리를 지정하지 않으면 작업이 실패합니다.찾기에서
{ $meta: "textScore" }
를 사용하려면 쿼리 조건에$text
연산자를 지정해야 합니다. 쿼리 조건에$text
연산자를 지정하지 않으면 작업이 실패합니다.
참고
$text
이 페이지에서는 자체 관리형(Atlas에서 관리하지 않는) 배포를 위한 일반 텍스트 쿼리 기능을 제공합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우 MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다.
가용성
프로젝션에서의 사용
텍스트 점수 필터링
집계에서 텍스트 점수 값이 있는 필드를 출력하는 단계 다음에 쿼리 조건을 지정하거나 후속 단계에서 필드에 대한 작업을 수행할 수 있습니다. 예시는 자체 관리 배포의 집계 파이프라인에서 $text를 참조하세요.
찾기에서는 텍스트 점수에 쿼리 조건을 지정할 수 없습니다. 대신 집계를 사용하세요.
정렬에서 사용
프로젝션 없이 정렬
집계에서는
textScore
를 프로젝션하지 않고도 결과 문서를{ $meta: "textScore" }
별로 정렬할 수 있습니다.찾기에서는
textScore
를 프로젝션할 필요 없이 결과 문서를{ $meta: "textScore" }
별로 정렬할 수 있습니다.
프로젝션으로 정렬
집계에서 프로젝션과 정렬 모두에
{ $meta: "textScore" }
표현식을 포함하면 프로젝션과 정렬에서 표현식에 대해 서로 다른 필드 이름을 가질 수 있습니다. 정렬의 필드 이름은 쿼리 시스템에서 무시됩니다.찾기에서 프로젝션과 정렬 모두에
{ $meta: "textScore" }
표현식을 포함하면 프로젝션과 정렬에서 표현식에 대해 서로 다른 필드 이름을 가질 수 있습니다. 정렬의 필드 이름은 쿼리 시스템에서 무시됩니다.
인덱스 키 메타데이터 $meta: "indexKey" (집계 및 찾기)
사용법
{ $meta: "indexKey" }
표현식은 디버깅 목적으로만 사용되며 애플리케이션 로직용으로는 사용할 수 없습니다.cursor.returnKey()
보다{ $meta: "indexKey" }
표현식을 사용하는 것이 좋습니다.
가용성
집계에서
{ $meta: "indexKey" }
표현식은$project
,$group
$sortByCount
등과 같은 집계 표현식을 허용하는 다양한 단계에 포함될 수 있지만$sort
은(는) 포함되지 않습니다. 그러나 집계 파이프라인을 사용하면 먼저{ $meta: "indexKey" }
표현식(예:$project
,$addFields
등)을 프로젝트한 다음 후속$sort
단계에서 해당 필드를 기준으로 정렬할 수 있습니다.찾기에서
{ $meta: "indexKey" }
표현식은 프로젝션 문서의 일부로만 사용할 수 있습니다.
반환 값
반환되는 값은 데이터베이스가 인덱스의 값을 나타내기로 결정하는 방법에 따라 달라지며 버전에 따라 변경될 수 있습니다. 표시된 값은 필드의 실제 값이 아닐 수 있습니다.
반환되는 값은 시스템에서 선택한 실행 계획에 따라 달라집니다. 예를 들어 쿼리에 답변하는 데 사용할 수 있는 인덱스가 두 개 있는 경우 'indexKey' 메타데이터의 값은 선택한 인덱스에 따라 달라집니다.
인덱스를 사용하지 않으면
{ $meta: "indexKey" }
표현식은 값을 반환하지 않으며 필드가 출력의 일부로 포함되지 않습니다.
예시
$meta: "textScore"
다음 문서로 articles
collection을 생성합니다.
db.articles.insertMany([ { "_id" : 1, "title" : "cakes and ale" }, { "_id" : 2, "title" : "more cakes" }, { "_id" : 3, "title" : "bread" }, { "_id" : 4, "title" : "some cakes" }, { "_id" : 5, "title" : "two cakes to go" }, { "_id" : 6, "title" : "pie" } ])
title
필드에 텍스트 인덱스를 생성합니다.
db.articles.createIndex( { title: "text"} )
다음 집계 작업은 텍스트 검색을 수행하고 $meta
연산자를 사용하여 텍스트 검색 점수를 기준으로 그룹화합니다.
db.articles.aggregate( [ { $match: { $text: { $search: "cake" } } }, { $group: { _id: { $meta: "textScore" }, count: { $sum: 1 } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
{ "_id" : 0.75, "count" : 1 } { "_id" : 0.6666666666666666, "count" : 1 } { "_id" : 1, "count" : 2 }
더 많은 예를 보려면 자체 관리형 집계 파이프라인의 $text를 참조하세요.
다음 쿼리는 cake
(이)라는 용어에 대한 텍스트 검색을 수행하고 프로젝션 문서에서 $meta
연산자를 사용하여 일치하는 각 문서에 할당된 점수를 추가합니다.
db.articles.find( { $text: { $search: "cake" } }, { score: { $meta: "textScore" } } )
이 작업은 텍스트 점수와 함께 다음 문서를 반환합니다.
{ "_id" : 4, "title" : "some cakes", "score" : 1 } { "_id" : 1, "title" : "cakes and ale", "score" : 0.75 } { "_id" : 5, "title" : "two cakes to go", "score" : 0.6666666666666666 } { "_id" : 2, "title" : "more cakes", "score" : 1 }
"textScore"
투영 및 정렬에 대한 추가 예시는 관련성 점수 예시를 참조하세요.
$meta: "indexKey"
참고
{ $meta: "indexKey" }
표현식은 디버깅 목적으로만 사용되며 애플리케이션 로직에는 사용되지 않습니다. MongoDB는 쿼리 시스템에서 선택한 인덱스와 연관된 값을 반환합니다. 시스템은 후속 실행 시 다른 인덱스를 선택할 수 있습니다.
선택한 인덱스의 경우 반환되는 값은 데이터베이스가 인덱스의 값을 나타내기로 결정하는 방법에 따라 달라지며 버전에 따라 변경될 수 있습니다. 표시된 값은 필드의 실제 값이 아닐 수 있습니다.
다음 문서로 orders
collection을 생성합니다.
db.orders.insertMany([ { "item" : "abc", "price" : NumberDecimal("12"), "quantity" : 2, "type": "apparel" }, { "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : 1, "type": "electronics" }, { "item" : "abc", "price" : NumberDecimal("10"), "quantity" : 5, "type": "apparel" } ])
type
및 item
필드에 다음 복합 인덱스를 생성합니다.
db.orders.createIndex( { type: 1, item: 1 } )
다음 집계 작업은 type
(이)가 apparel
(과)와 같은 모든 문서를 찾고 인덱스가 사용된 경우 일치하는 문서의 인덱스 키 값을 포함하기 위해 $meta
연산자를 사용합니다.
db.orders.aggregate( [ { $match: { type: "apparel" } }, { $addFields: { idxKey: { $meta: "indexKey" } } } ] )
다음 작업은 type
가 apparel
과 같은 모든 문서를 찾고 인덱스가 사용된 경우 일치하는 문서의 인덱스 키 값을 포함하기 위해 $meta
연산자를 사용합니다.
db.orders.find( { type: "apparel" }, { idxKey: { $meta: "indexKey" } } )
이 작업은 해당 인덱스 키와 일치하는 문서를 반환합니다.
{ "_id" : ObjectId("5e98a33ceaf5e9dcf2b8dcde"), "item" : "abc", "price" : NumberDecimal("12"), "quantity" : 2, "type" : "apparel", "idxKey" : { "type" : "apparel", "item" : "abc" } } { "_id" : ObjectId("5e98a33ceaf5e9dcf2b8dce0"), "item" : "abc", "price" : NumberDecimal("10"), "quantity" : 5, "type" : "apparel", "idxKey" : { "type" : "apparel", "item" : "abc" } }
인덱스를 사용하지 않으면 { $meta: "indexKey" }
가 아무 것도 반환하지 않습니다.
예를 들어, price
필드에 일치 조건을 지원하는 인덱스가 없다면 다음 작업에서는 인덱스를 사용하지 않습니다.
db.orders.aggregate( [ { $match: { price: { $gte: NumberDecimal("10") } } }, { $addFields: { idxKey: { $meta: "indexKey" } } } ] )
예를 들어, price
필드에 일치 조건을 지원하는 인덱스가 없다면 다음 작업에서는 인덱스를 사용하지 않습니다.
db.orders.find( { price: { $gte: NumberDecimal("10") } }, { idxKey: { $meta: "indexKey" } } )
이 작업은 idxKey
필드 없이 일치하는 문서를 반환합니다.
{ "_id" : ObjectId("5e98a33ceaf5e9dcf2b8dcde"), "item" : "abc", "price" : NumberDecimal("12"), "quantity" : 2, "type" : "apparel" } { "_id" : ObjectId("5e98a33ceaf5e9dcf2b8dcdf"), "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : 1, "type" : "electronics" } { "_id" : ObjectId("5e98a33ceaf5e9dcf2b8dce0"), "item" : "abc", "price" : NumberDecimal("10"), "quantity" : 5, "type" : "apparel" }