문서 메뉴
문서 홈
/ / /
C#/.NET
/

쿼리 지정

이 페이지의 내용

  • 개요
  • 리터럴 값
  • 비교 연산자
  • 로직 연산
  • 배열 연산자
  • 요소 연산자
  • 평가 연산자
  • 추가 정보

이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 쿼리를 지정하는 방법을 학습할 수 있습니다.

쿼리 필터를 생성해 쿼리에서 반환되는 일치하는 문서 집합의 범위를 좁힐 수 있습니다. 쿼리 필터는 읽기, 업데이트 또는 삭제 작업에서 식별하고자 하는 문서를 지정하는 표현식입니다.

참고

LINQ 사용

이 가이드에서는 쿼리 필터를 사용하여 쿼리를 지정하는 방법을 설명합니다. LINQ를 사용하여 쿼리를 지정할 수도 있습니다. LINQ 사용에 대해 자세히 알아보려면 LINQ를 참조하세요.

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

{ "_id": 1, "make": "Fender", "models": ["Stratocaster", "Telecaster"], "establishedYear": 1946, "rating": 9 }
{ "_id": 2, "make": "Gibson", "models": ["Les Paul", "SG", "Explorer"], "establishedYear": 1902, "rating": 8 }
{ "_id": 3, "make": "PRS", "models": ["Silver Sky", "SE", "Custom"], "establishedYear": 1985, "rating": 9 }
{ "_id": 4, "make": "Kiesel", "models": ["Ares", "Vader", "Solo"], "establishedYear": 2015 }
{ "_id": 5, "make": "Ibanez", "models": ["RG", "AZ"], "establishedYear": 1957, "rating": 7 }
{ "_id": 6, "make": "Strandberg", "models": ["Boden", "Salen"], "establishedYear": 1982 }

다음 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; }
public int? Rating { get; set; }
}

참고

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

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

클래스 매핑에 대해 자세히 알아보려면 클래스 매핑을 참조하세요.

다음 코드는 Guitar 클래스를 유형 매개변수로 사용하여 _guitarsCollection 객체를 인스턴스화합니다. 이 유형 매개변수는 드라이버가 MongoDB에서 보내고 받는 문서를 Guitar 클래스의 인스턴스로 자동으로 직렬화 및 역직렬화하도록 합니다.

private static IMongoCollection<Guitar> _guitarsCollection;

리터럴 값 쿼리는 쿼리 필터와 정확히 일치하는 문서를 반환합니다.

다음 예에서는 쿼리 필터를 Find() 메서드에 대한 매개변수로 지정합니다. 쿼리는 make 필드가 "펜더" 와 같은 모든 문서와 일치합니다.

// Finds all documents with a "make" value of "Fender"
var results = _guitarsCollection.Find(g => g.Make == "Fender").ToList();
foreach (var doc in results)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }

다음 예제에서는 빌더를 사용하여 이전 예제와 동일한 문서와 일치하는 쿼리 필터를 만듭니다.

// Creates a filter for all documents with a "make" value of "Fender"
var filter = Builders<Guitar>.Filter.Eq(g => g.Make, "Fender");
// Finds all documents that match the filter
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }

모든 문서 찾기

빈 쿼리 필터를 사용하여 collection의 모든 문서를 일치시킵니다. 다음과 같이 빌더를 사용하여 빈 쿼리 필터를 생성합니다.

var result = _guitarsCollection.Find(Builders<Guitar>.Filter.Empty).ToList();

빌더 사용에 대해 자세히 알아보려면 빌더를 사용한 작업을 참조하세요.

비교 연산자는 쿼리 필터에 지정된 값을 기준으로 문서의 값을 분석합니다. 일반적인 비교 연산자는 다음과 같습니다.

연산자
빌더
설명
>
Gt()
보다 큼
<=
Lte()
다음보다 작거나 같음
!=
Ne()
다음과 같지 않음

비교 연산자의 전체 목록은 비교쿼리 연산자 페이지를 참조하세요.

다음 예시는 쿼리 필터를 Find() 메서드에 대한 매개변수로 지정합니다. 쿼리는 establishedYear 필드가 1985보다 큰 모든 문서와 일치합니다.

// Finds all documents with am "establishedYear" value greater than 1985
var results = _guitarsCollection.Find(g => g.EstablishedYear > 1985).ToList();
foreach (var doc in results)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }

다음 예제에서는 빌더를 사용하여 이전 예제와 동일한 문서와 일치하는 쿼리 필터를 만듭니다.

// Creates a filter for all documents with an "establishedYear" value greater
// than 1985
var filter = Builders<Guitar>.Filter.Gt(g => g.EstablishedYear, 1985);
// Finds all documents that match the filter
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }

빌더 사용에 대해 자세히 알아보려면 빌더를 사용한 작업을 참조하세요.

논리 연산자는 두 개 이상의 표현식 집합의 결과에 적용된 논리를 사용하여 문서를 일치시킵니다. 다음은 몇 가지 논리 연산자 목록입니다.

연산자
빌더
설명
&&
And()
모든 표현식은 참으로 평가되어야 합니다.
||
Or()
하나 이상의 표현식이 참으로 평가되어야 합니다.

논리 연산자의 전체 목록은 논리 쿼리 연산자 페이지를 참조하세요.

다음 예에서는 쿼리 필터를 Find() 메서드에 대한 매개변수로 지정합니다. 쿼리는 establishedYear 필드가 1985 이상이고 make 필드가 " Kiesel " 와 같지 않은 모든 문서를 일치시킵니다.

// Finds all documents with an "establishedYear" value greater than 1985
// and a "make" value that is not equal to "Kiesel"
var results = _guitarsCollection.Find(g => g.EstablishedYear >= 1985 && r.Make != "Kiesel").ToList();
foreach (var doc in results)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }

다음 예제에서는 빌더를 사용하여 이전 예제와 동일한 문서와 일치하는 쿼리 필터를 만듭니다.

// Creates a filter for all documents with an "establishedYear" value greater
// than 1985 and a "make" value that does not equal "Kiesel"
var builder = Builders<Guitar>.Filter;
var filter = builder.And(builder.Gte(g => g.EstablishedYear, 1985), builder.Ne(r => r.Make, "Kiesel"));
// Finds all documents that match the filter
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }

빌더 사용에 대해 자세히 알아보려면 빌더를 사용한 작업을 참조하세요.

배열 연산자는 배열 필드에 있는 요소의 값 또는 수량을 기준으로 문서를 일치시킵니다. 다음은 배열 연산자를 사용하는 빌더 메서드 목록입니다.

연산자
설명
All()
배열 필드에 쿼리에 지정된 모든 요소가 포함된 경우 문서를 일치시킵니다.
Any()
배열 필드의 요소가 지정된 쿼리 필터와 일치하는 경우 문서와 일치합니다.
Size()
배열 필드가 지정된 크기인 경우 문서를 일치시킵니다.

참고

Any() 빌더는 $elemMatch 쿼리 연산자를 사용합니다.

$elemMatch 쿼리 선택기에 대해 자세히 알아보려면 $elemMatch를 참조하세요.

배열 연산자에 대한 자세한 내용은 배열 쿼리 연산자 페이지를 참조하세요.

다음 예시에서는 빌더를 사용하여 models 필드에 3개의 요소가 있는 모든 문서와 일치하는 쿼리 필터를 만듭니다.

// Creates a filter for all documents with 3 elements in the "models" field
var filter = Builders<Guitar>.Filter.Size(g => g.Models, 3);
// Finds all documents that match the filter
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }

빌더 사용에 대해 자세히 알아보려면 빌더를 사용한 작업을 참조하세요.

요소 연산자는 필드의 존재 여부 또는 유형에 따라 데이터를 쿼리합니다.

요소 연산자의 전체 목록은 요소 쿼리 연산자 페이지를 참조하세요.

다음 예시에서는 빌더를 사용하여 rating 필드가 있는 모든 문서와 일치하는 쿼리 필터를 만듭니다.

// Creates a filter for all documents with a populated "ratings" field
var filter = Builders<Guitar>.Filter.Exists(g => g.Rating);
// Finds all documents that match the filter
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
{ "_id" : 5, "make" : "Ibanez", "models" : ["RG", "AZ"], "establishedYear" : 1957, "rating" : 7 }

빌더 사용에 대해 자세히 알아보려면 빌더를 사용한 작업을 참조하세요.

평가 연산자는 개별 필드 또는 전체 collection 문서의 데이터를 분석합니다. 평가 연산자를 사용하는 일부 빌더 메서드에는 Regex()Text()가 포함됩니다.

평가 연산자의 전체 목록은 평가 쿼리 연산자 페이지를 참조하세요.

다음 예제에서는 빌더를 사용하여 문자 'G'로 시작하는 make 필드에 값이 있는 모든 문서와 일치하는 쿼리 필터를 생성합니다.

// Creates a filter for all documents with a populated "ratings" field
var filter = Builders<Guitar>.Filter.Regex(g => g.Make, "^G");
// Finds all documents that match the filter
var result = _guitarsCollection.Find(filter).ToList();
foreach (var doc in result)
{
// Prints the documents in bson (json) format
Console.WriteLine(doc.ToBsonDocument());
}
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }

빌더 사용에 대해 자세히 알아보려면 빌더를 사용한 작업을 참조하세요.

이 가이드에 언급된 연산자에 대한 자세한 내용은 다음 서버 매뉴얼 항목을 참조하세요.

빌더 사용에 대한 자세한 내용은 빌더를 사용한 작업 항목을 참조하세요.

LINQ를 사용하여 쿼리를 지정하는 방법을 알아보려면 LINQ를 참조하세요.

돌아가기

BSON 운영

다음

직렬화