Docs Menu
Docs Home
/ / /
C#/.NET
/

Atlas Search

이 페이지의 내용

  • 개요
  • Atlas Search 인덱스 만들기
  • Atlas Search 연산자
  • 자동 완성 기능
  • 복합
  • embeddedDocument
  • Equals
  • Exists
  • GeoShape
  • GeoWithin
  • 유사한 콘텐츠 더 보기
  • Near
  • Phrase
  • QueryString
  • 범위
  • 정규식
  • Span
  • Text
  • 와일드카드

이 가이드에서는 Search 빌더를 사용하여 MongoDB .NET/C# 드라이버로 $search 집계 파이프라인 단계를 빌드하는 방법에 대해 설명합니다.

$search 파이프라인 단계에 대해 자세히 알아보려면 $search를 참조하세요.

참고

Atlas for MongoDB v4.2 이상에서만 사용 가능

$search 집계 파이프라인 연산자는 Atlas Search 인덱스가 적용되고 MongoDB v4.2 이상을 실행하는 MongoDB Atlas 클러스터에서 호스팅되는 컬렉션에만 사용할 수 있습니다. 이 연산자의 필수 설정 및 기능에 대한 자세한 내용은 Atlas Search 설명서를 참조하세요.

이 가이드의 예에서는 guitars 컬렉션의 다음 문서를 사용합니다.

{ "_id": 1, "make": "Fender", "description": "Classic guitars known for their versatility.", "establishedYear": 1946, "in_stock": true, "rating": 9 }
{ "_id": 2, "make": "Gibson", "description": "Classic guitars known for their rich, full tones.", "establishedYear": 1902, "in_stock": true, "rating": 8 }
{ "_id": 3, "make": "PRS", "description": "High-end guitars known for their quality.", "establishedYear": 1985, "in_stock": true, "rating": 9 }
{ "_id": 4, "make": "Kiesel", "description": "Quality guitars made only for custom orders.", "establishedYear": 2015, "in_stock": false }
{ "_id": 5, "make": "Ibanez", "description": "Well-crafted guitars used by many professional guitarists.", "establishedYear": 1957, "in_stock": true, "rating": 7 }
{ "_id": 6, "make": "Strandberg", "description": "Modern guitars known for their headless models.", "establishedYear": 1982, "in_stock": false }

다음 Guitar 클래스는 이 컬렉션의 문서를 모델링합니다.

public class Guitar
{
public int Id { get; set; }
public string Make { get; set; }
public List<string> Models { get; set; }
public int EstablishedYear { get; set; }
[BsonElement("in_stock")]
public bool InStock { get; set; }
public int? Rating { get; set; }
}

참고

guitars 컬렉션의 문서는 카멜 케이스 명명 규칙을 사용합니다. 이 가이드의 예시에서는 ConventionPack 사용하여 컬렉션의 필드를 파스칼식 대/소문자로 역직렬화하고 Guitar 클래스의 속성에 매핑합니다.

사용자 지정 직렬화에 대해 자세히 알아보려면 사용자 지정 직렬화를 참조하세요.

Atlas 컬렉션에서 검색을 수행하려면 먼저 컬렉션에 Atlas Search 인덱스를 만들어야 합니다. Atlas Search 인덱스는 데이터를 검색 가능한 형식으로 분류하는 데이터 구조입니다.

Atlas Search 인덱스를 만드는 방법에 대한 자세한 내용은 Atlas 가이드에서 Atlas Search 인덱스 만들기를 참조하세요.

Search 클래스에는 $search 작업을 수행하는 데 사용할 수 있는 메서드가 포함되어 있습니다. 사용 가능한 $search 연산자의 전체 목록은 연산자 및 수집기 Atlas 가이드를 참조하세요.

불완전한 입력 문자열에서 일련의 문자가 포함된 단어나 구문을 검색하려면 Autocomplete() 메서드를 사용합니다.

다음 예에서는 make 필드의 'Gib' 문자열을 사용하여 guitars 컬렉션에서 자동 완성 검색을 수행합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Autocomplete(g => g.Make, "Gib"), indexName: "guitarmakes")
.ToList();

참고

검색하려는 필드가 검색 인덱스로 인덱싱된 경우 인덱스 이름을 Autocomplete 호출에 전달해야 합니다. 검색 인덱스가 존재하지 않으면 기본값 인덱스가 사용됩니다.

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }

autocomplete 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 autocomplete를 참조하세요.

두 개 이상의 연산자를 하나의 검색으로 결합하려면 Compound() 메서드를 사용합니다.

다음 예에서는 guitars 컬렉션에서 아래의 기준과 모두 일치하는 문서를 검색합니다.

  • 문서에 rating 필드가 있음

  • in_stock 필드가 false가 아님

  • establishedYear 필드의 값이 1940보다 큼

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Compound()
.Must(Builders<Guitar>.Search.Exists(g => g.Rating))
.MustNot(Builders<Guitar>.Search.Equals(g => g.InStock, false))
.Must(Builders<Guitar>.Search.Range(g => g.EstablishedYear, SearchRangeBuilder.Gt(1940))))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }

compound 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 compound를 참조하세요.

EmbeddedDocument() 방법을 사용하여 필드의 배열 값 내에 있는 문서에 대한 검색 작업을 수행합니다.

참고

내장된 문서에서 Atlas Search를 사용하려면 배열 필드에 embeddedDocument 인덱스를 생성해야 합니다.

embeddedDocument 인덱스를 정의하는 방법을 알아보려면 Atlas 설명서에서 embeddedDocument 유형에 대한 인덱스 정의를 참조하세요.

guitars 컬렉션의 일부 문서에 제품 세부 정보 객체 배열을 포함하는 productDetails 필드가 추가되었다고 가정해 보겠습니다.

{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "rating": 9, "productDetails": [{"product_id": 1234, "serial": "YZ5678"}] }
{ "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "rating": 8 }
{ "_id": 3, "make": "PRS", "description": "...", "establishedYear": 1985, "in_stock": true, "rating": 9, "productDetails": [{"product_id": 9870, "serial": "AB5555"}] }
{ "_id": 4, "make": "Kiesel", "description": "...", "establishedYear": 2015, "in_stock": false }
{ "_id": 5, "make": "Ibanez", "description": "...", "establishedYear": 1957, "in_stock": true, "rating": 7, "productDetails": [{"product_id": 5432, "serial": "ZZ1234"}] }
{ "_id": 6, "make": "Strandberg", "description": "...", "establishedYear": 1982, "in_stock": false }

productDetails 필드에 embeddedDocument 인덱스를 생성한 후 해당 필드의 문서에 대해 Atlas Search 작업을 수행할 수 있습니다. 다음 예시에서는 productDetails 배열 필드에서 텍스트 검색을 수행하고 serial 필드 값이 "YZ5678"인 문서를 반환합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.EmbeddedDocument(
g => g.ProductDetails,
Builders<ProductDetails>.Search.Text(p => p.Serial, "YZ5678")
)).ToList();
return result;

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9, "productDetails" : [{ "product_id" : 1234, "serial" : "YZ5678" }] }

embeddedDocument 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 embeddedDocument 를 참조하세요.

필드가 지정된 값과 일치하는지 확인하려면 Equals() 메서드를 사용합니다.

다음 예에서는 guitars 컬렉션에서 in_stock 필드 값이 true인 모든 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Equals(g => g.InStock, true))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "description" : "...", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
{ "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }

equals 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 equals를 참조하세요.

지정된 인덱스 필드 이름이 있는 문서를 검색하려면 Exists() 메서드를 사용합니다. 지정된 필드가 존재하지만 인덱스되지 않은 경우 문서는 결과 집합에 포함되지 않습니다.

다음 예에서는 guitars 컬렉션에서 rating 필드가 존재하는 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Exists(g => g.Rating))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "description" : "...", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
{ "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }

exists 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 exists를 참조하세요.

특정 도형과 관련된 문서를 검색하려면 GeoShape() 메서드를 사용합니다. 검색할 좌표를 지정할 때에는 경도를 먼저 지정하고 위도를 지정해야 합니다. 경도 값 범위는 -180 ~ 180(두 값 모두 포함)입니다. 위도 값범위는 -90 ~ 90(두 값 모두 포함)입니다.

참고

Atlas Search에서는 다음을 지원하지 않습니다.

  • 기본값이 좌표 기준계(CRS)

  • 평면형 XY 좌표계(2차원)

  • 좌표쌍 점 표기법(pointFieldName: [12, 34])

guitars 컬렉션의 일부 문서에 in_stock_location 필드가 추가되었다고 가정해 보겠습니다. 이제 컬렉션의 변경된 문서는 다음과 같습니다.

{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ -73.93615, 40.69791 ]}, "rating": 9 }
{ "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ 47.6062, 122.321 ]}, "rating": 8 }

다음 예에서는 in_stock_location 필드의 좌표가 지정된 다각형과 교차하는 모든 문서를 검색합니다.

GeoJsonPolygon<GeoJson2DGeographicCoordinates> searchArea = new(new(new(new GeoJson2DGeographicCoordinates[]
{
new(-72.93615, 41.69791),
new(-72.93615, 40.59791),
new(-74.93615, 40.59791),
new(-74.93615, 41.69791),
new(-72.93615, 41.69791),
})));
var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.GeoShape(g => g.InStockLocation, GeoShapeRelation.Intersects, searchArea))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "in_stock_location" : { "type" : "Point", "coordinates" : ["-73.93615", "40.69791"] }, "rating" : 9 }

geoShape 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 geoShape을 참조하세요.

GeoWithin() 메서드를 사용하여 지정된 GeoJSON 필드의 좌표가 지정된 도형 내에 속하는 문서를 검색합니다. 다음 범위 내에 있는 점을 검색할 수 있습니다.

  • 경계 박스

  • 다각형

검색할 좌표를 지정할 때에는 경도를 먼저 지정하고 위도를 지정해야 합니다. 경도 값 범위는 -180 ~ 180(두 값 모두 포함)입니다. 위도 값 범위는 -90 ~ 90(두 값 모두 포함)입니다.

참고

Atlas Search에서는 다음을 지원하지 않습니다.

  • 기본값이 좌표 기준계(CRS)

  • 평면형 XY 좌표계(2차원)

  • 좌표쌍 점 표기법(pointFieldName: [12, 34])

guitars 컬렉션의 일부 문서에 in_stock_location 필드가 추가되었다고 가정해 보겠습니다. 이제 컬렉션의 변경된 문서는 다음과 같습니다.

{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ -73.93615, 40.69791 ]}, "rating": 9 }
{ "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ 47.6062, 122.321 ]}, "rating": 8 }

다음 예에서는 in_stock_location 필드의 좌표가 지정된 다각형 내에 속하는 모든 문서를 검색합니다.

GeoJsonPolygon<GeoJson2DGeographicCoordinates> searchArea = new(new(new(new GeoJson2DGeographicCoordinates[]
{
new(-74.3994140625, 40.5305017757),
new(-74.7290039063, 40.5805846641),
new(-74.7729492188, 40.9467136651),
new(-74.0698242188, 41.1290213475),
new(-73.65234375, 40.9964840144),
new(-72.6416015625, 40.9467136651),
new(-72.3559570313, 40.7971774152),
new(-74.3994140625, 40.5305017757),
})));
var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.GeoWithin(g => g.InStockLocation, searchArea))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "in_stock_location" : { "type" : "Point", "coordinates" : ["-73.93615", "40.69791"] }, "rating" : 9 }

geoWithin 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 geoWithin을 참조하세요.

지정된 값 목록과 일치하는 필드 값이 있는 문서를 검색 하려면 In() 메서드를 사용합니다.

다음 예시 에서는 guitars 컬렉션 에서 make 필드 값이 "Fender" 또는 "Gibson" 인 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.In(g => g.Make, ["Fender", "Gibson"]))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "rating": 9 }
{ "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "rating": 8 }

입력 문서와 유사한 문서를 검색하려면 MoreLikeThis() 메서드를 사용합니다.

다음 예에서는 guitars 컬렉션에서 Description 필드의 값이 'high quality'인 객체와 유사한 문서를 검색합니다.

var searchDocument = new GuitarSearch()
{
Description = "high quality",
};
var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.MoreLikeThis(searchDocument))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 3, "make" : "PRS", "description" : "High-end guitars known for their quality.", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }

moreLikeThis 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 moreLikeThis를 참조하세요.

지정된 필드가 지정된 값에 가까운 문서를 검색하려면 Near() 메서드를 사용합니다. 다음에서 검색을 수행할 수 있습니다.

  • 숫자 필드

  • 날짜 필드

  • 지리적 점

다음 예에서는 guitars 컬렉션에서 rating 필드의 값이 9에 가까운 문서를 검색합니다. 값이 숫자 9에 얼마나 가까운지에 따라 문서가 순서대로 반환됩니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Near(g => g.Rating, 9, 1))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "description" : "...", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
{ "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }

near 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 near를 참조하세요.

지정된 필드에 입력 문자열이 포함된 문서를 검색하려면 Phrase() 메서드를 사용합니다.

다음 예에서는 guitars 컬렉션에서 description 필드에 'classic guitars'라는 구문이 포함된 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Phrase(g => g.Description, "classic guitars"))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }

다음과 같이 컬렉션에서 여러 개의 별도 구문과 일치하는 문서를 검색할 수도 있습니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Phrase(g => g.Description, new List<string>() { "classic guitars", "quality guitars" }))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }
{ "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }

phrase 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 phrase를 참조하세요.

다음 연산자 및 구분자와 함께 문자열을 사용하여 문서를 검색하려면 QueryString() 메서드를 사용합니다.

  • AND

  • OR

  • NOT

  • ()

다음 예에서는 guitars 컬렉션에서 description 필드의 값이 다음 각 기준과 일치하는 문서를 검색합니다.

  • 문자열 'classic' 또는 문자열 'quality' 포함

  • 'custom' 문자열을 포함하지 않음

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.QueryString(g => g.Description, "(classic OR quality) AND NOT custom"))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 3, "make" : "PRS", "description" : "High-end guitars known for their quality.", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }

queryString 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 queryString을 참조하세요.

지정된 필드의 값이 지정된 숫자 또는 날짜 범위 내에 속하는 문서를 검색하려면 Range() 메서드를 사용합니다.

다음 예에서는 guitars 컬렉션에서 establishedYear 값이 1980보다 크고 2020보다 작은 모든 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Range(g => g.EstablishedYear, SearchRangeBuilder.Gt(1980).Lt(2020)))
.ToList();

이 검색을 수행하면 다음 결과가 반환됩니다.

{ "_id" : 3, "make" : "PRS", "description" : "High-end guitars known for their quality.", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 }
{ "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }
{ "_id" : 6, "make" : "Strandberg", "description" : "Modern guitars known for their headless models.", "establishedYear" : 1982, "in_stock" : false, "rating" : null }

range 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 range를 참조하세요.

정규 표현식을 사용하여 문서를 검색하려면 Regex() 메서드를 사용합니다.

다음 예에서는 guitars 컬렉션에서 make 필드의 값에 정확히 6개의 문자가 포함된 문서를 검색합니다.

var regex = "[A-Za-z]{6}";
var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Regex(g => g.Make, regex))
.ToList();

이 검색을 수행하면 다음 결과가 반환됩니다.

{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
{ "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }
{ "_id" : 5, "make" : "Ibanez", "description" : "Well-crafted guitars used by many professional guitarists.", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }

참고

기본적으로 regex 연산자는 분석된 필드에서 실행할 수 없습니다. 다음과 같이 allowAnalyzedField 옵션을 true로 설정하여 분석된 필드에서 실행되도록 할 수 있습니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Regex(g => g.Make, regex, true))
.ToList();

allowAnalyzedField 옵션을 true로 설정하면 예기치 않은 검색 결과가 나올 수 있습니다. 자세히 알아보려면 regex 동작을 참조하세요.

regex 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 regex를 참조하세요.

필드 리전 내에서 텍스트 검색 일치 항목을 검색하려면 Span() 메서드를 사용합니다. 이 메서드를 사용하면 지정된 정밀도까지 서로 가까이 있는 문자열을 찾을 수 있습니다.

참고

쿼리가 위치 정보를 추적해야 하기 때문에 span 연산자는 다른 연산자보다 계산 집약적입니다.

다음 예에서는 guitars 컬렉션에서 description 필드 값에 서로 한 단어 내에 'guitars' 및 'quality' 문자열이 포함된 문서를 검색합니다.

var searchTerms = new[]
{
Builders<Guitar>.SearchSpan.Term(g => g.Description, "guitars"),
Builders<Guitar>.SearchSpan.Term(g => g.Description, "quality")
};
var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Span(Builders<Guitar>.SearchSpan.Near(searchTerms, 1)))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }

_id: 3인 문서에 'guitars' 및 'quality'라는 문자열이 포함되어 있지만 이 문자열은 두 단어 이상으로 구분되어 있으므로 검색 결과에서 이 문서가 생략됩니다.

span 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 span을 참조하세요.

Text() 메서드를 사용하여 문서에서 지정된 문자열 또는 문자열 배열을 검색합니다. 한 문자열에 여러 개의 용어가 있는 경우 Atlas Search는 문자열의 각 용어에 대해 개별적으로 일치하는 항목을 찾습니다.

다음 예에서는 guitars 컬렉션에서 description 필드 값에 'used by professionals' 문자열이 포함된 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Text(g => g.Description, "used by professional"))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 5, "make" : "Ibanez", "description" : "Well-crafted guitars used by many professional guitarists.", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }

검색 문자열에 여러 용어가 포함된 경우 이 메서드는 문자열에 있는 각 용어에 대해 개별적으로 일치하는 항목도 찾습니다.

text 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 text를 참조하세요.

검색 문자열에서 모든 문자와 일치할 수 있는 특수 문자를 사용하여 문서를 검색하려면 Wildcard() 메서드를 사용합니다. 검색에 사용할 수 있는 문자는 다음과 같습니다.

캐릭터
설명

?

모든 단일 문자와 일치

*

0개 이상의 문자와 일치

\

이스케이프 문자

다음 예에서는 make 필드의 값에 'Strand'라는 문자열과 그 뒤에 다른 문자가 포함되어 있는 문서를 검색합니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Wildcard(g => g.Make, "Strand*"))
.ToList();

이 검색을 수행하면 다음 문서가 반환됩니다.

{ "_id" : 6, "make" : "Strandberg", "description" : "Modern guitars known for their headless models.", "establishedYear" : 1982, "in_stock" : false, "rating" : null }

참고

기본적으로 wildcard 연산자는 분석된 필드에서 실행할 수 없습니다. 다음과 같이 allowAnalyzedField 옵션을 true로 설정하여 분석된 필드에서 실행되도록 할 수 있습니다.

var result = guitarsCollection.Aggregate()
.Search(Builders<Guitar>.Search.Wildcard(g => g.Make, "Strand*", true))
.ToList();

allowAnalyzedField 옵션을 true로 설정하면 예기치 않은 검색 결과가 나올 수 있습니다. 자세한 내용은 wildcard 동작을 참조하세요.

wildcard 연산자에 대해 자세히 알아보려면 Atlas 가이드에서 wildcard를 참조하세요.

돌아가기

빌더와의 운영