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

LINQ

이 페이지의 내용

  • 개요
  • 컬렉션을 쿼리 가능하게 만들기
  • 지원되는 집계 단계
  • 프로젝트
  • $매치
  • $limit
  • $skip
  • $unwind
  • 중첩된 문
  • $그룹
  • $sort
  • $lookup
  • $vectorSearch
  • 비트 연산자
  • $bitAnd
  • $bitOr
  • $bitNot
  • $bitXor
  • 지원되지 않는 집계 단계
  • 지원되는 방법
  • 변환된 쿼리 보기

이 가이드 에서는 MongoDB .NET/ C# 드라이버 와 함께LINQ 를 사용하는 방법을 학습 수 있습니다. LINQ를 사용하면 언어 키워드와 연산자를 사용하여 강력한 형식의 객체 컬렉션에 대한 쿼리를 구성할 수 있습니다. .NET/ C# 드라이버 는 LINQ 쿼리를 집계 작업으로 자동 변환합니다.

이 가이드의 예시에서는 Atlas 샘플 데이터 세트에 제공된 sample_restaurants 데이터베이스의 restaurants 컬렉션을 사용합니다. 무료 MongoDB Atlas 클러스터를 생성하고 샘플 데이터 세트를 로드하는 방법에 대한 자세한 내용은 빠른 시작을 참조하세요.

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

public class Restaurant
{
public ObjectId Id { get; set; }
public string Name { get; set; }
[BsonElement("restaurant_id")]
public string RestaurantId { get; set; }
public string Cuisine { get; set; }
public Address Address { get; set; }
public string Borough { get; set; }
public List<GradeEntry> Grades { get; set; }
}
public class Address
{
public string Building { get; set; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
public string ZipCode { get; set; }
}
public class GradeEntry
{
public DateTime Date { get; set; }
public string Grade { get; set; }
public float Score { get; set; }
}

참고

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

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

LINQ를 사용하여 컬렉션을 쿼리하려면 먼저 컬렉션에 연결되는 IQueryable 객체를 만들어야 합니다. 객체를 만들려면 다음과 같이 AsQueryable() 메서드를 사용합니다.

var restaurantsDatabase = client.GetDatabase("sample_restaurants");
var restaurantsCollection = restaurantsDatabase.GetCollection<Restaurant>("restaurants");
var queryableCollection = restaurantsCollection.AsQueryable();

AsQueryable() 메서드가 MongoDB 특정 메서드 세트와 함께 IQueryable 확장자 메서드를 포함하는 IMongoQueryable 인스턴스를 반환합니다.

쿼리 가능한 객체가 있으면 메서드 구문을 사용하여 쿼리를 작성할 수 있습니다. 일부 파이프라인 단계는 SQL 쿼리 구문과 유사한 쿼리 이해 구문도 지원합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 쿼리를 작성하는 방법을 볼 수 있습니다.

var query = queryableCollection
.Where(r => r.Name == "The Movable Feast")
.Select(r => new { r.Name, r.Address });
var query = from r in queryableCollection
where r.Name == "The Movable Feast"
select new { r.Name, r.Address };

이전 예시의 결과를 다음과 같이 출력할 수 있습니다.

foreach (var restaurant in query)
{
Console.WriteLine(restaurant.ToJson());
}
{ "name" : "The Movable Feast", "address" : { "building" : "284", "coord" : [-73.982923900000003, 40.6580753], "street" : "Prospect Park West", "zipcode" : "11215" } }

쿼리 결과 액세스

ToList() 또는 ToCursor() 메서드를 사용하여 쿼리 결과에 액세스할 수도 있습니다:

var results = query.ToList();
var results = query.ToCursor();

LINQ를 사용하여 집계 파이프라인을 생성할 수 있습니다. .NET/C# 드라이버는 각 LINQ 구문을 해당 집계 파이프라인 단계로 자동 변환합니다. 이 섹션에서는 어떤 집계 파이프라인 단계가 지원되는지 알아볼 수 있습니다.

집계 파이프라인 단계에 대해 자세히 알아보려면 서버 매뉴얼의 집계 단계 페이지를 참조하세요.

$project 집계 단계에서는 지정된 필드만 포함된 문서를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하여 LINQ를 사용하여 $project 단계를 생성하는 방법을 확인합니다:

var query = queryableCollection
.Select(r => new { r.Name, r.Address });
var query = from r in queryableCollection
select new { r.Name, r.Address };

이전 예시의 결과에는 다음 문서가 포함됩니다.

{ "name" : "The Movable Feast", "address" : { "building" : "284", "coord" : [-73.982923900000003, 40.6580753], "street" : "Prospect Park West", "zipcode" : "11215" } }

참고

_id 필드 제외

LINQ 프로젝션에 _id 필드를 포함하지 않은 경우 .NET/C# 드라이버가 결과에서 자동으로 제외합니다.

$match 집계 단계에서는 지정된 기준과 일치하는 문서를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하여 LINQ를 사용하여 $match 단계를 생성하는 방법을 확인합니다:

var query = queryableCollection
.Where(r => r.Name == "The Movable Feast");
var query = from r in queryableCollection
where r.Name == "The Movable Feast"
select r;

이전 예시의 결과에는 다음 문서가 포함됩니다.

// Results Truncated
{ "_id" : ObjectId(...), "name" : "The Movable Feast", "restaurant_id" : "40361606", "cuisine" : "American", "address" : {...}, "borough" : "Brooklyn", "grades" : [...] }

$limit 집계 단계는 쿼리에서 반환되는 문서 수를 제한합니다. 다음 예는 LINQ를 사용하여 $limit 스테이지를 생성하는 방법을 보여 줍니다:

var query = queryableCollection
.Where(r => r.Cuisine == "Italian")
.Select(r => new {r.Name, r.Cuisine})
.Take(5);

이전 예시의 결과에는 다음 문서가 포함됩니다.

{ "name" : "Philadelhia Grille Express", "cuisine" : "Italian" }
{ "name" : "Isle Of Capri Resturant", "cuisine" : "Italian" }
{ "name" : "Marchis Restaurant", "cuisine" : "Italian" }
{ "name" : "Crystal Room", "cuisine" : "Italian" }
{ "name" : "Forlinis Restaurant", "cuisine" : "Italian" }

$skip 집계 단계에서는 쿼리에서 반환한 지정된 수의 문서를 건너뛰고 나머지 결과를 반환합니다. 다음 예는 LINQ를 사용하여 $skip 단계를 생성하는 방법을 보여 줍니다:

var query = queryableCollection
.Where(r => r.Cuisine == "Italian")
.Select(r => new {r.Name, r.Cuisine})
.Skip(2);

앞의 예에서는 기준과 일치하는 처음 두 레스토랑을 건너뛰고 나머지를 반환합니다. 결과에는 다음 문서가 포함됩니다:

// Results Truncated
{ "name" : "Marchis Restaurant", "cuisine" : "Italian" }
{ "name" : "Crystal Room", "cuisine" : "Italian" }
{ "name" : "Forlinis Restaurant", "cuisine" : "Italian" }
...

$unwind 집계 단계는 지정된 배열 필드를 분해하고 해당 배열의 각 요소에 대한 문서를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 $unwind 단계를 생성하는 방법을 볼 수 있습니다.

var query = queryableCollection
.Where(r => r.Name == "The Movable Feast")
.SelectMany(r => r.Grades);
var query = from r in queryableCollection
where r.Name == "The Movable Feast"
from grade in r.Grades
select grade;

위 예의 쿼리는 Name 필드의 값이 "The Movable Feast"인 문서를 찾습니다. 그런 다음 이 문서의 Grades 배열에 있는 각 요소에 대해 쿼리는 새 문서를 반환합니다. 결과에는 다음 문서가 포함됩니다.

{ "date" : ISODate("2014-11-19T00:00:00Z"), "grade" : "A", "score" : 11 }
{ "date" : ISODate("2013-11-14T00:00:00Z"), "grade" : "A", "score" : 2 }
{ "date" : ISODate("2012-12-05T00:00:00Z"), "grade" : "A", "score" : 13 }
{ "date" : ISODate("2012-05-17T00:00:00Z"), "grade" : "A", "score" : 11 }

SelectSelectMany 문을 연결하거나 중첩하여 중첩된 배열을 해제할 수 있습니다.새 스키마 가 있는 문서가 포함된 컬렉션 을 가정해 보겠습니다. 이러한 문서에는 restaurants 클래스가 나타내는 문서 배열 을 보유하는 필드 가 포함되어 Restaurant 있습니다. 배열 내의 문서에는 각각 grades 클래스가 나타내는 문서 배열 을 보유하는 필드 가 Grade 있습니다. 다음 코드는 이 컬렉션 에 있는 단일 문서 의 예시 입니다.

{
"_id": { "$oid": ... },
"restaurants": [
{
"_id": { ... } ,
"address": { ... },
"name": "Tov Kosher Kitchen",
"grades": [
{
"date" : ISODate("2014-11-24T00:00:00Z"),
"grade" : "Z",
"score" : 20.0
},
{
"date" : ISODate("2013-01-17T00:00:00Z"),
"grade" : "A",
"score" : 13.0
}
]
...
},
{
"_id": { ... } ,
"address": { ... },
"name": "Harriet's Kitchen",
"grades": [
{
"date" : ISODate("2014-04-19T00:00:00Z"),
"grade" : "B",
"score" : 12.0
}
],
...
},
...
]
}

SelectMany 또는 Select 문 내에 SelectMany 문을 중첩할 수 있습니다. 다음 예시 에서는 Select 성명서 내에 SelectMany 성명서 을 중첩하여 컬렉션 의 각 문서 에서 배열 을 조회 합니다. 각 배열 에는 각 문서 에 있는 모든 레스토랑의 모든 등급 객체가 포함됩니다.

var query = queryableCollection
.Select(r => r.Restaurants.SelectMany(r => r.Grades));
// output for first document in collection
[
{ "date" : ISODate("2014-11-24T00:00:00Z"),
"grade" : "Z",
"score" : 20.0
},
{ "date" : ISODate("2013-01-17T00:00:00Z"),
"grade" : "A",
"score" : 13.0
},
{
"date" : ISODate("2014-04-19T00:00:00Z"),
"grade" : "B",
"score" : 12.0
},
...
],
// output for second document in collection
[
...
]

$group 집계 단계에서는 지정한 기준에 따라 문서를 그룹으로 분리합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 $group 단계를 생성하는 방법을 볼 수 있습니다.

var query = queryableCollection
.GroupBy(r => r.Cuisine)
.Select(g => new { Cuisine = g.Key, Count = g.Count() });
var query = from r in queryableCollection
group r by r.Cuisine into g
select new {Cuisine = g.Key, Count = g.Count()};

앞의 예시에서는 각 문서를 Cuisine 필드의 값으로 그룹화한 다음 각 Cuisine 값이 있는 문서 수를 계산합니다. 결과에는 다음 문서가 포함됩니다.

// Results Truncated
{ "cuisine" : "Caribbean", "count" : 657 }
{ "cuisine" : "Café/Coffee/Tea", "count" : 1214 }
{ "cuisine" : "Iranian", "count" : 2 }
{ "cuisine" : "Nuts/Confectionary", "count" : 6 }
{ "cuisine" : "Middle Eastern", "count" : 168 }
...

참고

결과 순서

앞의 쿼리가 항상 동일한 순서로 결과를 반환하는 것은 아닙니다. 이 예시를 실행하면 위에 표시된 것과 다른 순서로 결과가 반환될 수 있습니다.

$sort 집계 단계는 지정한 순서대로 쿼리 결과를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 $sort 단계를 생성하는 방법을 볼 수 있습니다.

var query = queryableCollection
.OrderBy(r => r.Name)
.ThenByDescending(r => r.RestaurantId);
var query = from r in queryableCollection
orderby r.Name, r.RestaurantId descending
select r;

위 예시에서는 Name 필드를 기준으로 알파벳순으로 정렬된 쿼리 결과를 반환하고, 2차적으로 RestaurantId 필드에서는 내림차순으로 정렬합니다. 다음은 반환된 결과에 포함된 문서의 하위 집합입니다.

// Results Truncated
...
{ "_id" : ObjectId(...), "name" : "Aba Turkish Restaurant", "restaurant_id" : "41548686", "cuisine" : "Turkish", "address" : {...}, "borough" : "Manhattan", "grades" : [...] }
{ "_id" : ObjectId(...), "name" : "Abace Sushi", "restaurant_id" : "50006214", "cuisine" : "Japanese", "address" : { ... }, "borough" : "Manhattan", "grades" : [...] }
{ "_id" : ObjectId(...), "name" : "Abacky Potluck", "restaurant_id" : "50011222", "cuisine" : "Asian", "address" : { ... }, "borough" : "Manhattan", "grades" : [...] }
{ "_id" : ObjectId(...), "name" : "Abaleh", "restaurant_id" : "50009096", "cuisine" : "Mediterranean", "address" : { ... }, "borough" : "Manhattan", "grades" : [...] }
...

$lookup 집계 단계는 한 컬렉션의 문서를 동일한 데이터베이스의 다른 컬렉션에 있는 문서와 조인합니다. $lookup 단계에서는 각 입력 문서에 새 배열 필드를 추가합니다. 새 배열 필드에는 '조인'된 컬렉션에서 일치하는 문서들이 포함됩니다.

참고

조회를 수행하려면 AsQueryable() 메서드를 사용하여 두 컬렉션을 모두 쿼리할 수 있도록 설정해야 합니다.

컬렉션을 쿼리 가능하게 만드는 방법을 알아보려면 컬렉션을 쿼리 가능하게 만들기를 참조하세요.

레스토랑 리뷰가 있는 reviews라는 sample_restaurants 데이터베이스의 두 번째 컬렉션을 생각해 보세요. $lookup 단계를 사용하여 해당 컬렉션의 문서를 restaurants 컬렉션의 동일한 name 값을 가진 문서에 조인할 수 있습니다.

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

public class Review
{
public ObjectId Id { get; set; }
[BsonElement("restaurant_name")]
public string RestaurantName { get; set; }
public string Reviewer { get; set; }
[BsonElement("review_text")]
public string ReviewText { get; set; }
}

Method Syntax 또는 Query Syntax 탭을 선택하여 LINQ를 사용해 $lookup 단계를 생성하는 방법을 확인합니다.

var query = queryableCollection
.GroupJoin(reviewCollection,
restaurant => restaurant.Name,
review => review.RestaurantName,
(restaurant, reviews) =>
new { Restaurant = restaurant, Reviews = reviews }
);
var query = from restaurant in queryableCollection
join rv in reviewCollection on restaurant.Name equals rv.RestaurantName into reviews
select new { restaurant, reviews };

앞의 예에서는 restaurants 컬렉션의 모든 문서를 반환합니다. 각 레스토랑 문서에는 해당 레스토랑에 대한 모든 리뷰가 포함된 reviews 추가 필드가 있습니다. 리뷰 문서의 name 필드 값이 레스토랑 문서의 name 필드 값과 일치하면 리뷰가 레스토랑과 일치합니다.

다음은 반환된 결과의 일부입니다.

// Results Truncated
{
"restaurant": {
"_id": ObjectId("..."),
"name": "The Movable Feast",
"restaurant_id": "40361606",
"cuisine": "American",
"address": { ... },
"borough": "Brooklyn",
"grades": [ ... ]
},
"reviews": [
{
"_id": ObjectId("..."),
"restaurant_name": "The Movable Feast",
"reviewer": "Lazlo Cravensworth",
"review_text": "Great restaurant! 12/10 stars!"
},
{
"_id": ObjectId("..."),
"restaurant_name": "The Movable Feast",
"reviewer": "Michael Scarn",
"review_text": "It really was a feast"
}
]
}

$vectorSearch 집계 단계는 지정된 필드의 벡터에 대해 근사 최근접 이웃(ANN) 검색을 수행합니다. 데이터에 대한 벡터 검색을 수행하려면 먼저 컬렉션에 정의된 Atlas Vector Search 인덱스가 있어야 합니다.

다음 예시에서 사용된 샘플 데이터 세트를 얻으려면 빠른 시작을 참조하세요. 다음 예시에 사용된 샘플 Atlas Vector Search 인덱스를 Atlas 매뉴얼의 Atlas Vector Search 인덱스 생성을 참조하세요.

sample_mflix 데이터베이스의 embedded_movies 컬렉션을 가정해 보겠습니다. $vectorSearch 단계를 사용하여 컬렉션에 있는 문서의 plot_embedding 필드에서 시맨틱 검색을 수행할 수 있습니다.

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

[BsonIgnoreExtraElements]
public class EmbeddedMovie
{
[BsonIgnoreIfDefault]
public string Title { get; set; }
public string Plot { get; set; }
[BsonElement("plot_embedding")]
public double[] Embedding { get; set; }
}

다음 예시에서는 $vectorSearch 단계를 생성하여 "time travel" 문자열에 대한 벡터 임베딩을 사용하여 plot_embedding 필드를 검색하는 방법을 보여줍니다.

// Defines vector embeddings for the string "time travel"
var vector = new[] {-0.0016261312,-0.028070757,-0.011342932,-0.012775794,-0.0027440966,0.008683807,-0.02575152,-0.02020668,-0.010283281,-0.0041719596,0.021392956,0.028657231,-0.006634482,0.007490867,0.018593878,0.0038187427,0.029590257,-0.01451522,0.016061379,0.00008528442,-0.008943722,0.01627464,0.024311995,-0.025911469,0.00022596726,-0.008863748,0.008823762,-0.034921836,0.007910728,-0.01515501,0.035801545,-0.0035688248,-0.020299982,-0.03145631,-0.032256044,-0.028763862,-0.0071576433,-0.012769129,0.012322609,-0.006621153,0.010583182,0.024085402,-0.001623632,0.007864078,-0.021406285,0.002554159,0.012229307,-0.011762793,0.0051682983,0.0048484034,0.018087378,0.024325324,-0.037694257,-0.026537929,-0.008803768,-0.017767483,-0.012642504,-0.0062712682,0.0009771782,-0.010409906,0.017754154,-0.004671795,-0.030469967,0.008477209,-0.005218282,-0.0058480743,-0.020153364,-0.0032805866,0.004248601,0.0051449724,0.006791097,0.007650814,0.003458861,-0.0031223053,-0.01932697,-0.033615597,0.00745088,0.006321252,-0.0038154104,0.014555207,0.027697546,-0.02828402,0.0066711367,0.0077107945,0.01794076,0.011349596,-0.0052715978,0.014755142,-0.019753495,-0.011156326,0.011202978,0.022126047,0.00846388,0.030549942,-0.0041386373,0.018847128,-0.00033655585,0.024925126,-0.003555496,-0.019300312,0.010749794,0.0075308536,-0.018287312,-0.016567878,-0.012869096,-0.015528221,0.0078107617,-0.011156326,0.013522214,-0.020646535,-0.01211601,0.055928253,0.011596181,-0.017247654,0.0005939711,-0.026977783,-0.003942035,-0.009583511,-0.0055248477,-0.028737204,0.023179034,0.003995351,0.0219661,-0.008470545,0.023392297,0.010469886,-0.015874773,0.007890735,-0.009690142,-0.00024970944,0.012775794,0.0114762215,0.013422247,0.010429899,-0.03686786,-0.006717788,-0.027484283,0.011556195,-0.036068123,-0.013915418,-0.0016327957,0.0151016945,-0.020473259,0.004671795,-0.012555866,0.0209531,0.01982014,0.024485271,0.0105431955,-0.005178295,0.033162415,-0.013795458,0.007150979,0.010243294,0.005644808,0.017260984,-0.0045618312,0.0024725192,0.004305249,-0.008197301,0.0014203656,0.0018460588,0.005015015,-0.011142998,0.01439526,0.022965772,0.02552493,0.007757446,-0.0019726837,0.009503538,-0.032042783,0.008403899,-0.04609149,0.013808787,0.011749465,0.036388017,0.016314628,0.021939443,-0.0250051,-0.017354285,-0.012962398,0.00006107364,0.019113706,0.03081652,-0.018114036,-0.0084572155,0.009643491,-0.0034721901,0.0072642746,-0.0090636825,0.01642126,0.013428912,0.027724205,0.0071243206,-0.6858542,-0.031029783,-0.014595194,-0.011449563,0.017514233,0.01743426,0.009950057,0.0029706885,-0.015714826,-0.001806072,0.011856096,0.026444625,-0.0010663156,-0.006474535,0.0016161345,-0.020313311,0.0148351155,-0.0018393943,0.0057347785,0.018300641,-0.018647194,0.03345565,-0.008070676,0.0071443142,0.014301958,0.0044818576,0.003838736,-0.007350913,-0.024525259,-0.001142124,-0.018620536,0.017247654,0.007037683,0.010236629,0.06046009,0.0138887605,-0.012122675,0.037694257,0.0055081863,0.042492677,0.00021784494,-0.011656162,0.010276617,0.022325981,0.005984696,-0.009496873,0.013382261,-0.0010563189,0.0026507939,-0.041639622,0.008637156,0.026471283,-0.008403899,0.024858482,-0.00066686375,-0.0016252982,0.027590916,0.0051449724,0.0058647357,-0.008743787,-0.014968405,0.027724205,-0.011596181,0.0047650975,-0.015381602,0.0043718936,0.002159289,0.035908177,-0.008243952,-0.030443309,0.027564257,0.042625964,-0.0033688906,0.01843393,0.019087048,0.024578573,0.03268257,-0.015608194,-0.014128681,-0.0033538956,-0.0028757197,-0.004121976,-0.032389335,0.0034322033,0.058807302,0.010943064,-0.030523283,0.008903735,0.017500903,0.00871713,-0.0029406983,0.013995391,-0.03132302,-0.019660193,-0.00770413,-0.0038853872,0.0015894766,-0.0015294964,-0.006251275,-0.021099718,-0.010256623,-0.008863748,0.028550599,0.02020668,-0.0012962399,-0.003415542,-0.0022509254,0.0119360695,0.027590916,-0.046971202,-0.0015194997,-0.022405956,0.0016677842,-0.00018535563,-0.015421589,-0.031802863,0.03814744,0.0065411795,0.016567878,-0.015621523,0.022899127,-0.011076353,0.02841731,-0.002679118,-0.002342562,0.015341615,0.01804739,-0.020566562,-0.012989056,-0.002990682,0.01643459,0.00042527664,0.008243952,-0.013715484,-0.004835075,-0.009803439,0.03129636,-0.021432944,0.0012087687,-0.015741484,-0.0052016205,0.00080890034,-0.01755422,0.004811749,-0.017967418,-0.026684547,-0.014128681,0.0041386373,-0.013742141,-0.010056688,-0.013268964,-0.0110630235,-0.028337335,0.015981404,-0.00997005,-0.02424535,-0.013968734,-0.028310679,-0.027750863,-0.020699851,0.02235264,0.001057985,0.00081639783,-0.0099367285,0.013522214,-0.012016043,-0.00086471526,0.013568865,0.0019376953,-0.019020405,0.017460918,-0.023045745,0.008503866,0.0064678704,-0.011509543,0.018727167,-0.003372223,-0.0028690554,-0.0027024434,-0.011902748,-0.012182655,-0.015714826,-0.0098634185,0.00593138,0.018753825,0.0010146659,0.013029044,0.0003521757,-0.017620865,0.04102649,0.00552818,0.024485271,-0.009630162,-0.015608194,0.0006718621,-0.0008418062,0.012395918,0.0057980907,0.016221326,0.010616505,0.004838407,-0.012402583,0.019900113,-0.0034521967,0.000247002,-0.03153628,0.0011038032,-0.020819811,0.016234655,-0.00330058,-0.0032289368,0.00078973995,-0.021952773,-0.022459272,0.03118973,0.03673457,-0.021472929,0.0072109587,-0.015075036,0.004855068,-0.0008151483,0.0069643734,0.010023367,-0.010276617,-0.023019087,0.0068244194,-0.0012520878,-0.0015086699,0.022046074,-0.034148756,-0.0022192693,0.002427534,-0.0027124402,0.0060346797,0.015461575,0.0137554705,0.009230294,-0.009583511,0.032629255,0.015994733,-0.019167023,-0.009203636,0.03393549,-0.017274313,-0.012042701,-0.0009930064,0.026777849,-0.013582194,-0.0027590916,-0.017594207,-0.026804507,-0.0014236979,-0.022032745,0.0091236625,-0.0042419364,-0.00858384,-0.0033905501,-0.020739838,0.016821127,0.022539245,0.015381602,0.015141681,0.028817179,-0.019726837,-0.0051283115,-0.011489551,-0.013208984,-0.0047017853,-0.0072309524,0.01767418,0.0025658219,-0.010323267,0.012609182,-0.028097415,0.026871152,-0.010276617,0.021912785,0.0022542577,0.005124979,-0.0019710176,0.004518512,-0.040360045,0.010969722,-0.0031539614,-0.020366628,-0.025778178,-0.0110030435,-0.016221326,0.0036587953,0.016207997,0.003007343,-0.0032555948,0.0044052163,-0.022046074,-0.0008822095,-0.009363583,0.028230704,-0.024538586,0.0029840174,0.0016044717,-0.014181997,0.031349678,-0.014381931,-0.027750863,0.02613806,0.0004136138,-0.005748107,-0.01868718,-0.0010138329,0.0054348772,0.010703143,-0.003682121,0.0030856507,-0.004275259,-0.010403241,0.021113047,-0.022685863,-0.023032416,0.031429652,0.001792743,-0.005644808,-0.011842767,-0.04078657,-0.0026874484,0.06915057,-0.00056939584,-0.013995391,0.010703143,-0.013728813,-0.022939114,-0.015261642,-0.022485929,0.016807798,0.007964044,0.0144219175,0.016821127,0.0076241563,0.005461535,-0.013248971,0.015301628,0.0085171955,-0.004318578,0.011136333,-0.0059047225,-0.010249958,-0.018207338,0.024645219,0.021752838,0.0007614159,-0.013648839,0.01111634,-0.010503208,-0.0038487327,-0.008203966,-0.00397869,0.0029740208,0.008530525,0.005261601,0.01642126,-0.0038753906,-0.013222313,0.026537929,0.024671877,-0.043505676,0.014195326,0.024778508,0.0056914594,-0.025951454,0.017620865,-0.0021359634,0.008643821,0.021299653,0.0041686273,-0.009017031,0.04044002,0.024378639,-0.027777521,-0.014208655,0.0028623908,0.042119466,0.005801423,-0.028124074,-0.03129636,0.022139376,-0.022179363,-0.04067994,0.013688826,0.013328944,0.0046184794,-0.02828402,-0.0063412455,-0.0046184794,-0.011756129,-0.010383247,-0.0018543894,-0.0018593877,-0.00052024535,0.004815081,0.014781799,0.018007403,0.01306903,-0.020433271,0.009043689,0.033189073,-0.006844413,-0.019766824,-0.018767154,0.00533491,-0.0024575242,0.018727167,0.0058080875,-0.013835444,0.0040719924,0.004881726,0.012029372,0.005664801,0.03193615,0.0058047553,0.002695779,0.009290274,0.02361889,0.017834127,0.0049017193,-0.0036388019,0.010776452,-0.019793482,0.0067777685,-0.014208655,-0.024911797,0.002385881,0.0034988478,0.020899786,-0.0025858153,-0.011849431,0.033189073,-0.021312982,0.024965113,-0.014635181,0.014048708,-0.0035921505,-0.003347231,0.030869836,-0.0017161017,-0.0061346465,0.009203636,-0.025165047,0.0068510775,0.021499587,0.013782129,-0.0024475274,-0.0051149824,-0.024445284,0.006167969,0.0068844,-0.00076183246,0.030150073,-0.0055948244,-0.011162991,-0.02057989,-0.009703471,-0.020646535,0.008004031,0.0066378145,-0.019900113,-0.012169327,-0.01439526,0.0044252095,-0.004018677,0.014621852,-0.025085073,-0.013715484,-0.017980747,0.0071043274,0.011456228,-0.01010334,-0.0035321703,-0.03801415,-0.012036037,-0.0028990454,-0.05419549,-0.024058744,-0.024272008,0.015221654,0.027964126,0.03182952,-0.015354944,0.004855068,0.011522872,0.004771762,0.0027874154,0.023405626,0.0004242353,-0.03132302,0.007057676,0.008763781,-0.0027057757,0.023005757,-0.0071176565,-0.005238275,0.029110415,-0.010989714,0.013728813,-0.009630162,-0.029137073,-0.0049317093,-0.0008630492,-0.015248313,0.0043219104,-0.0055681667,-0.013175662,0.029723546,0.025098402,0.012849103,-0.0009996708,0.03118973,-0.0021709518,0.0260181,-0.020526575,0.028097415,-0.016141351,0.010509873,-0.022965772,0.002865723,0.0020493253,0.0020509914,-0.0041419696,-0.00039695262,0.017287642,0.0038987163,0.014795128,-0.014661839,-0.008950386,0.004431874,-0.009383577,0.0012604183,-0.023019087,0.0029273694,-0.033135757,0.009176978,-0.011023037,-0.002102641,0.02663123,-0.03849399,-0.0044152127,0.0004527676,-0.0026924468,0.02828402,0.017727496,0.035135098,0.02728435,-0.005348239,-0.001467017,-0.019766824,0.014715155,0.011982721,0.0045651635,0.023458943,-0.0010046692,-0.0031373003,-0.0006972704,0.0019043729,-0.018967088,-0.024311995,0.0011546199,0.007977373,-0.004755101,-0.010016702,-0.02780418,-0.004688456,0.013022379,-0.005484861,0.0017227661,-0.015394931,-0.028763862,-0.026684547,0.0030589928,-0.018513903,0.028363993,0.0044818576,-0.009270281,0.038920518,-0.016008062,0.0093902415,0.004815081,-0.021059733,0.01451522,-0.0051583014,0.023765508,-0.017874114,-0.016821127,-0.012522544,-0.0028390652,0.0040886537,0.020259995,-0.031216389,-0.014115352,-0.009176978,0.010303274,0.020313311,0.0064112223,-0.02235264,-0.022872468,0.0052449396,0.0005723116,0.0037321046,0.016807798,-0.018527232,-0.009303603,0.0024858483,-0.0012662497,-0.007110992,0.011976057,-0.007790768,-0.042999174,-0.006727785,-0.011829439,0.007024354,0.005278262,-0.017740825,-0.0041519664,0.0085905045,0.027750863,-0.038387362,0.024391968,0.00087721116,0.010509873,-0.00038508154,-0.006857742,0.0183273,-0.0037054466,0.015461575,0.0017394272,-0.0017944091,0.014181997,-0.0052682655,0.009023695,0.00719763,-0.013522214,0.0034422,0.014941746,-0.0016711164,-0.025298337,-0.017634194,0.0058714002,-0.005321581,0.017834127,0.0110630235,-0.03369557,0.029190388,-0.008943722,0.009363583,-0.0034222065,-0.026111402,-0.007037683,-0.006561173,0.02473852,-0.007084334,-0.010110005,-0.008577175,0.0030439978,-0.022712521,0.0054582027,-0.0012620845,-0.0011954397,-0.015741484,0.0129557345,-0.00042111133,0.00846388,0.008930393,0.016487904,0.010469886,-0.007917393,-0.011762793,-0.0214596,0.000917198,0.021672864,0.010269952,-0.007737452,-0.010243294,-0.0067244526,-0.015488233,-0.021552904,0.017127695,0.011109675,0.038067464,0.00871713,-0.0025591573,0.021312982,-0.006237946,0.034628596,-0.0045251767,0.008357248,0.020686522,0.0010696478,0.0076708077,0.03772091,-0.018700508,-0.0020676525,-0.008923728,-0.023298996,0.018233996,-0.010256623,0.0017860786,0.009796774,-0.00897038,-0.01269582,-0.018527232,0.009190307,-0.02372552,-0.042119466,0.008097334,-0.0066778013,-0.021046404,0.0019593548,0.011083017,-0.0016028056,0.012662497,-0.000059095124,0.0071043274,-0.014675168,0.024831824,-0.053582355,0.038387362,0.0005698124,0.015954746,0.021552904,0.031589597,-0.009230294,-0.0006147976,0.002625802,-0.011749465,-0.034362018,-0.0067844326,-0.018793812,0.011442899,-0.008743787,0.017474247,-0.021619547,0.01831397,-0.009037024,-0.0057247817,-0.02728435,0.010363255,0.034415334,-0.024032086,-0.0020126705,-0.0045518344,-0.019353628,-0.018340627,-0.03129636,-0.0034038792,-0.006321252,-0.0016161345,0.033642255,-0.000056075285,-0.005005019,0.004571828,-0.0024075406,-0.00010215386,0.0098634185,0.1980148,-0.003825407,-0.025191706,0.035161756,0.005358236,0.025111731,0.023485601,0.0023342315,-0.011882754,0.018287312,-0.0068910643,0.003912045,0.009243623,-0.001355387,-0.028603915,-0.012802451,-0.030150073,-0.014795128,-0.028630573,-0.0013487226,0.002667455,0.00985009,-0.0033972147,-0.021486258,0.009503538,-0.017847456,0.013062365,-0.014341944,0.005078328,0.025165047,-0.015594865,-0.025924796,-0.0018177348,0.010996379,-0.02993681,0.007324255,0.014475234,-0.028577257,0.005494857,0.00011725306,-0.013315615,0.015941417,0.009376912,0.0025158382,0.008743787,0.023832154,-0.008084005,-0.014195326,-0.008823762,0.0033455652,-0.032362677,-0.021552904,-0.0056081535,0.023298996,-0.025444955,0.0097301295,0.009736794,0.015274971,-0.0012937407,-0.018087378,-0.0039387033,0.008637156,-0.011189649,-0.00023846315,-0.011582852,0.0066411467,-0.018220667,0.0060846633,0.0376676,-0.002709108,0.0072776037,0.0034188742,-0.010249958,-0.0007747449,-0.00795738,-0.022192692,0.03910712,0.032122757,0.023898797,0.0076241563,-0.007397564,-0.003655463,0.011442899,-0.014115352,-0.00505167,-0.031163072,0.030336678,-0.006857742,-0.022259338,0.004048667,0.02072651,0.0030156737,-0.0042119464,0.00041861215,-0.005731446,0.011103011,0.013822115,0.021512916,0.009216965,-0.006537847,-0.027057758,-0.04054665,0.010403241,-0.0056281467,-0.005701456,-0.002709108,-0.00745088,-0.0024841821,0.009356919,-0.022659205,0.004061996,-0.013175662,0.017074378,-0.006141311,-0.014541878,0.02993681,-0.00028448965,-0.025271678,0.011689484,-0.014528549,0.004398552,-0.017274313,0.0045751603,0.012455898,0.004121976,-0.025458284,-0.006744446,0.011822774,-0.015035049,-0.03257594,0.014675168,-0.0039187097,0.019726837,-0.0047251107,0.0022825818,0.011829439,0.005391558,-0.016781142,-0.0058747325,0.010309938,-0.013049036,0.01186276,-0.0011246296,0.0062112883,0.0028190718,-0.021739509,0.009883412,-0.0073175905,-0.012715813,-0.017181009,-0.016607866,-0.042492677,-0.0014478565,-0.01794076,0.012302616,-0.015194997,-0.04433207,-0.020606548,0.009696807,0.010303274,-0.01694109,-0.004018677,0.019353628,-0.001991011,0.000058938927,0.010536531,-0.17274313,0.010143327,0.014235313,-0.024152048,0.025684876,-0.0012504216,0.036601283,-0.003698782,0.0007310093,0.004165295,-0.0029157067,0.017101036,-0.046891227,-0.017460918,0.022965772,0.020233337,-0.024072073,0.017220996,0.009370248,0.0010363255,0.0194336,-0.019606877,0.01818068,-0.020819811,0.007410893,0.0019326969,0.017887443,0.006651143,0.00067394477,-0.011889419,-0.025058415,-0.008543854,0.021579562,0.0047484366,0.014062037,0.0075508473,-0.009510202,-0.009143656,0.0046817916,0.013982063,-0.0027990784,0.011782787,0.014541878,-0.015701497,-0.029350337,0.021979429,0.01332228,-0.026244693,-0.0123492675,-0.003895384,0.0071576433,-0.035454992,-0.00046984528,0.0033522295,0.039347045,0.0005119148,0.00476843,-0.012995721,0.0024042083,-0.006931051,-0.014461905,-0.0127558,0.0034555288,-0.0074842023,-0.030256703,-0.007057676,-0.00807734,0.007804097,-0.006957709,0.017181009,-0.034575284,-0.008603834,-0.005008351,-0.015834786,0.02943031,0.016861115,-0.0050849924,0.014235313,0.0051449724,0.0025924798,-0.0025741523,0.04289254,-0.002104307,0.012969063,-0.008310596,0.00423194,0.0074975314,0.0018810473,-0.014248641,-0.024725191,0.0151016945,-0.017527562,0.0018727167,0.0002830318,0.015168339,0.0144219175,-0.004048667,-0.004358565,0.011836103,-0.010343261,-0.005911387,0.0022825818,0.0073175905,0.00403867,0.013188991,0.03334902,0.006111321,0.008597169,0.030123414,-0.015474904,0.0017877447,-0.024551915,0.013155668,0.023525586,-0.0255116,0.017220996,0.004358565,-0.00934359,0.0099967085,0.011162991,0.03092315,-0.021046404,-0.015514892,0.0011946067,-0.01816735,0.010876419,-0.10124666,-0.03550831,0.0056348112,0.013942076,0.005951374,0.020419942,-0.006857742,-0.020873128,-0.021259667,0.0137554705,0.0057880944,-0.029163731,-0.018767154,-0.021392956,0.030896494,-0.005494857,-0.0027307675,-0.006801094,-0.014821786,0.021392956,-0.0018110704,-0.0018843795,-0.012362596,-0.0072176233,-0.017194338,-0.018713837,-0.024272008,0.03801415,0.00015880188,0.0044951867,-0.028630573,-0.0014070367,-0.00916365,-0.026537929,-0.009576847,-0.013995391,-0.0077107945,0.0050016865,0.00578143,-0.04467862,0.008363913,0.010136662,-0.0006268769,-0.006591163,0.015341615,-0.027377652,-0.00093136,0.029243704,-0.020886457,-0.01041657,-0.02424535,0.005291591,-0.02980352,-0.009190307,0.019460259,-0.0041286405,0.004801752,0.0011787785,-0.001257086,-0.011216307,-0.013395589,0.00088137644,-0.0051616337,0.03876057,-0.0033455652,0.00075850025,-0.006951045,-0.0062112883,0.018140694,-0.006351242,-0.008263946,0.018154023,-0.012189319,0.0075508473,-0.044358727,-0.0040153447,0.0093302615,-0.010636497,0.032789204,-0.005264933,-0.014235313,-0.018393943,0.007297597,-0.016114693,0.015021721,0.020033404,0.0137688,0.0011046362,0.010616505,-0.0039453674,0.012109346,0.021099718,-0.0072842683,-0.019153694,-0.003768759,0.039320387,-0.006747778,-0.0016852784,0.018154023,0.0010963057,-0.015035049,-0.021033075,-0.04345236,0.017287642,0.016341286,-0.008610498,0.00236922,0.009290274,0.028950468,-0.014475234,-0.0035654926,0.015434918,-0.03372223,0.004501851,-0.012929076,-0.008483873,-0.0044685286,-0.0102233,0.01615468,0.0022792495,0.010876419,-0.0059647025,0.01895376,-0.0069976957,-0.0042952523,0.017207667,-0.00036133936,0.0085905045,0.008084005,0.03129636,-0.016994404,-0.014915089,0.020100048,-0.012009379,-0.006684466,0.01306903,0.00015765642,-0.00530492,0.0005277429,0.015421589,0.015528221,0.032202728,-0.003485519,-0.0014286962,0.033908837,0.001367883,0.010509873,0.025271678,-0.020993087,0.019846799,0.006897729,-0.010216636,-0.00725761,0.01818068,-0.028443968,-0.011242964,-0.014435247,-0.013688826,0.006101324,-0.0022509254,0.013848773,-0.0019077052,0.017181009,0.03422873,0.005324913,-0.0035188415,0.014128681,-0.004898387,0.005038341,0.0012320944,-0.005561502,-0.017847456,0.0008538855,-0.0047884234,0.011849431,0.015421589,-0.013942076,0.0029790192,-0.013702155,0.0001199605,-0.024431955,0.019926772,0.022179363,-0.016487904,-0.03964028,0.0050849924,0.017487574,0.022792496,0.0012504216,0.004048667,-0.00997005,0.0076041627,-0.014328616,-0.020259995,0.0005598157,-0.010469886,0.0016852784,0.01716768,-0.008990373,-0.001987679,0.026417969,0.023792166,0.0046917885,-0.0071909656,-0.00032051947,-0.023259008,-0.009170313,0.02071318,-0.03156294,-0.030869836,-0.006324584,0.013795458,-0.00047151142,0.016874444,0.00947688,0.00985009,-0.029883493,0.024205362,-0.013522214,-0.015075036,-0.030603256,0.029270362,0.010503208,0.021539574,0.01743426,-0.023898797,0.022019416,-0.0068777353,0.027857494,-0.021259667,0.0025758184,0.006197959,0.006447877,-0.00025200035,-0.004941706,-0.021246338,-0.005504854,-0.008390571,-0.0097301295,0.027244363,-0.04446536,0.05216949,0.010243294,-0.016008062,0.0122493,-0.0199401,0.009077012,0.019753495,0.006431216,-0.037960835,-0.027377652,0.016381273,-0.0038620618,0.022512587,-0.010996379,-0.0015211658,-0.0102233,0.007071005,0.008230623,-0.009490209,-0.010083347,0.024431955,0.002427534,0.02828402,0.0035721571,-0.022192692,-0.011882754,0.010056688,0.0011904413,-0.01426197,-0.017500903,-0.00010985966,0.005591492,-0.0077707744,-0.012049366,0.011869425,0.00858384,-0.024698535,-0.030283362,0.020140035,0.011949399,-0.013968734,0.042732596,-0.011649498,-0.011982721,-0.016967745,-0.0060913274,-0.007130985,-0.013109017,-0.009710136};
// Specifies that the vector search will consider the 150 nearest neighbors
// in the specified index
var options = new VectorSearchOptions<EmbeddedMovie>()
{
IndexName = "vector_index",
NumberOfCandidates = 150
};
// Builds aggregation pipeline and specifies that the $vectorSearch stage
// returns 10 results
var results = queryableCollection
.VectorSearch(m => m.Embedding, vector, 10, options)
.Select(m => new { m.Title, m.Plot });

이전 예시의 결과에는 다음 문서가 포함됩니다.

{ "_id" : ObjectId("573a13a0f29313caabd04a4f"), "plot" : "A reporter, learning of time travelers visiting 20th century disasters, tries to change the history they know by averting upcoming disasters.", "title" : "Thrill Seekers" }
{ "_id" : ObjectId("573a13d8f29313caabda6557"), "plot" : "At the age of 21, Tim discovers he can travel in time and change what happens and has happened in his own life. His decision to make his world a better place by getting a girlfriend turns out not to be as easy as you might think.", "title" : "About Time" }
{ "_id" : ObjectId("573a13a5f29313caabd13b4b"), "plot" : "Hoping to alter the events of the past, a 19th century inventor instead travels 800,000 years into the future, where he finds humankind divided into two warring races.", "title" : "The Time Machine" }
{ "_id" : ObjectId("573a13aef29313caabd2e2d7"), "plot" : "After using his mother's newly built time machine, Dolf gets stuck involuntary in the year 1212. He ends up in a children's crusade where he confronts his new friends with modern techniques...", "title" : "Crusade in Jeans" }
{ "_id" : ObjectId("573a1399f29313caabceec0e"), "plot" : "An officer for a security agency that regulates time travel, must fend for his life against a shady politician who has a tie to his past.", "title" : "Timecop" }
{ "_id" : ObjectId("573a1399f29313caabcee36f"), "plot" : "A time-travel experiment in which a robot probe is sent from the year 2073 to the year 1973 goes terribly wrong thrusting one of the project scientists, a man named Nicholas Sinclair into a...", "title" : "A.P.E.X." }
{ "_id" : ObjectId("573a13c6f29313caabd715d3"), "plot" : "Agent J travels in time to M.I.B.'s early days in 1969 to stop an alien from assassinating his friend Agent K and changing history.", "title" : "Men in Black 3" }
{ "_id" : ObjectId("573a13d4f29313caabd98c13"), "plot" : "Bound by a shared destiny, a teen bursting with scientific curiosity and a former boy-genius inventor embark on a mission to unearth the secrets of a place somewhere in time and space that exists in their collective memory.", "title" : "Tomorrowland" }
{ "_id" : ObjectId("573a13b6f29313caabd477fa"), "plot" : "With the help of his uncle, a man travels to the future to try and bring his girlfriend back to life.", "title" : "Love Story 2050" }
{ "_id" : ObjectId("573a13e5f29313caabdc40c9"), "plot" : "A dimension-traveling wizard gets stuck in the 21st century because cell-phone radiation interferes with his magic. With his home world on the brink of war, he seeks help from a jaded ...", "title" : "The Portal" }

Atlas Vector Search, Atlas Vector Search 인덱스 및 이를 애플리케이션에 통합하는 방법에 대한 자세한 내용은 Atlas 매뉴얼의 Atlas Vector Search 개요를 참조하세요. .NET/C# 드라이버를 사용하여 Atlas Vector Search 쿼리를 실행하는 추가 예제는 Atlas 매뉴얼의 벡터 검색 쿼리 실행을 참조하고 언어 드롭다운에서 C#을 선택하세요.

이 섹션에서는 집계 파이프라인 에서 사용할 수 있는 .NET/ C# 드라이버 에서 지원하는 비트 연산자에 대해 설명합니다. 동일한 단계에서 여러 비트 연산자를 사용할 수 있습니다. 비트 연산자를 사용할 때는 다음 지침 적용 됩니다.

  • 모든 피연산자는 int 또는 long 유형이어야 합니다.

  • $bitAnd, $bitOr, $bitXor는 두 개 이상의 피연산자를 사용합니다. $bitNot은 피연산자를 하나만 사용합니다.

  • 비트 연산은 왼쪽에서 오른쪽으로 평가됩니다.

이 섹션의 예제에서는 ingredients 컬렉션 의 다음 문서를 사용합니다.

{ "_id" : 1, "name" : "watermelon", "is_available" : 1, "is_cheap" : 1 },
{ "_id" : 2, "name" : "onions", "is_available" : 1, "is_cheap" : 0 },
{ "_id" : 3, "name" : "eggs", "is_available" : 0, "is_cheap" : 0 },
{ "_id" : 4, "name" : "potatoes", "is_available" : 1, "is_cheap" : 1 },
{ "_id" : 5, "name" : "pasta", "is_available" : 0, "is_cheap" : 1 },
{ "_id" : 6, "name" : "cheese", "is_available" : 1 }

"is_available" 필드 는 재료의 사용 가능 여부를 나타냅니다. 이 필드 의 값이 0 이면 재료를 사용할 수 없습니다. 값이 1 이면 재료를 사용할 수 있습니다.

"is_cheap" 필드 는 재료가 저렴한지 여부를 나타냅니다. 이 필드 의 값이 0 이면 재료가 저렴하지 않습니다. 값이 1 이면 재료가 저렴합니다.

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

public class Ingredient
{
public int Id { get; set; }
public string Name { get; set; }
[BsonElement("is_available")]
public int? IsAvailable { get; set; }
[BsonElement("is_cheap")]
public int? IsCheap { get; set; }
}

참고

누락되거나 정의되지 않은 피연산자

비트 연산자 intlong 전달하는 피연산자가 nullable 또는 유형이고 누락되거나 정의되지 않은 값이 포함된 경우 전체 표현식 null 은 로 평가됩니다. 피연산자가 null을 허용하지 않는 int 또는 long 유형이고 누락되거나 정의되지 않은 값을 포함하는 경우 .NET/ C# 드라이버 에서 오류가 발생합니다.

$bitAnd 집계 연산자 는 지정된 인수에 대해 비트 AND 연산을 수행합니다. & 문자로 두 개 이상의 절을 연결하여 $bitAnd 연산자 를 사용할 수 있습니다.

다음 예시 에서는 LINQ를 사용하여 $bitAnd 단계를 만드는 방법을 보여 줍니다. 이 코드는 Name 필드 의 값이 "watermelon" 인 문서 를 검색합니다. 그런 다음 이 문서 의 IsAvailableIsCheap 필드 값에 대해 비트 AND 연산을 수행합니다.

var query = queryableCollection
.Where(i => i.Name == "watermelon")
.Select(i => i.IsAvailable & i.IsCheap);

앞의 코드는 IsAvailable 필드 (1)와 IsCheap 필드 (1)의 값에 대한 AND 연산의 결과인 1 을 반환합니다.

다음 예시 에서는 컬렉션 의 모든 문서에 대해 동일한 비트 AND 연산을 수행합니다.

var query = queryableCollection
.Select(i => i.IsAvailable & i.IsCheap);
1
0
0
1
0
null

null 결과는 Name 필드 값이 "cheese" 인 문서 에서 가져옵니다. 이 문서 에는 IsCheap 필드 가 없으므로 표현식 이 null 로 평가됩니다.

$bitOr 집계 연산자 는 지정된 인수에 대해 비트 OR 연산을 수행합니다. | 문자로 두 개 이상의 절을 연결하여 $bitOr 연산자 를 사용할 수 있습니다.

다음 예시 에서는 LINQ를 사용하여 $bitOr 단계를 만드는 방법을 보여 줍니다. 이 코드는 Name 필드 의 값이 "onions" 인 문서 를 검색합니다. 그런 다음 이 문서 의 IsAvailableIsCheap 필드 값에 대해 비트 OR 연산을 수행합니다.

var query = queryableCollection
.Where(i => i.Name == "onions")
.Select(i => i.IsAvailable | i.IsCheap);

앞의 코드는 IsAvailable 필드 (1)와 IsCheap 필드 (0)의 값에 대한 OR 연산의 결과인 1 을 반환합니다.

$bitNot 집계 연산자 는 지정된 인수에 대해 비트 NOT 연산을 수행합니다. 피연산자 앞에 ~ 문자를 붙여 $bitNot 연산자 를 사용할 수 있습니다. $bitNot 은(는) 인수를 하나만 사용합니다. 다음 예시 에서는 LINQ를 사용하여 $bitNot 단계를 만드는 방법을 보여 줍니다.

var query = queryableCollection
.Select(i => ~i.IsCheap);
-2
-1
-1
-2
-2
null

$bitXor 집계 연산자 는 지정된 인수에 대해 비트 XOR 연산을 수행합니다. ^ 문자로 두 개 이상의 절을 연결하여 $bitXor 연산자 를 사용할 수 있습니다.

다음 예시 에서는 LINQ를 사용하여 $bitXor 단계를 만드는 방법을 보여 줍니다. 이 코드는 Name 필드 의 값이 "watermelon" 또는 "onions" 인 문서를 검색합니다. 그런 다음 이러한 문서의 IsAvailableIsCheap 필드 값에 대해 비트별 XOR 연산을 수행합니다.

var query = queryableCollection
.Where(i => i.Name == "watermelon" || i.Name == "onions")
.Select(i => i.IsAvailable ^ i.IsCheap);

결과에는 다음 값이 포함됩니다.

0
1

LINQ의 MongoDB .NET/C# 드라이버 구현은 다음 집계 단계를 지원하지 않습니다.

  • $redact

  • $geoNear

  • $out

빌더를 사용하여 $out 단계로 집계 파이프라인을 생성하는 방법을 알아보려면 컬렉션에 파이프라인 결과 쓰기 섹션을 참조하세요.

다음은 LINQ의 MongoDB .NET/ C# 드라이버 구현 에서 지원되는 몇 가지 메서드입니다.

메서드 이름
설명

Any

지정된 기준과 일치하는 문서가 있는지 확인합니다.

Average

지정된 필드의 평균을 계산합니다.

Count

지정된 기준과 일치하는 문서 수를 나타내는 Int32를 반환합니다.

LongCount

지정된 기준과 일치하는 문서 수를 나타내는 Int64를 반환합니다.

DateFromString

stringDateTime 객체 로 변환합니다.

Distinct

지정된 조건과 일치하는 고유한 문서를 반환합니다.

Exists

필드 존재 여부 테스트

First

일치하는 첫 번째 문서를 반환하고, 일치하는 문서가 없으면 예외를 발생시킵니다.

FirstOrDefault

일치하는 첫 번째 문서를 반환하거나 일치하는 문서가 없는 경우 null을 반환합니다.

GroupBy

지정된 기준에 따라 문서 그룹화

GroupJoin

동일한 데이터베이스의 다른 컬렉션에 대한 왼쪽 외부 조인을 수행합니다.

IsMissing

필드 가 누락되고 그렇지 않으면 false인 경우 true 를 반환합니다.

IsNullOrMissing

필드 가 null이거나 누락된 경우 true 를 반환하고 그렇지 않으면 false를 반환합니다.

Max

지정된 최대값을 가진 문서 반환

OfType

지정된 유형과 일치하는 문서 반환

OrderBy, OrderByDescending

지정된 정렬 순서로 결과 반환

ThenBy, ThenByDescending

세컨더리 정렬을 지정할 수 있습니다.

Select

지정된 기준에 따라 문서를 선택합니다.

SelectMany

시퀀스의 각 요소를 프로젝션하고 결과 시퀀스를 하나의 문서로 결합

Single

일치하는 문서 하나만 반환하고 문서의 개수가 하나가 아닐 경우 예외 발생

SingleOrDefault

일치하는 단일 문서를 반환하고, 일치하는 문서가 없으면 null을 반환

Skip

지정된 수의 문서를 건너뛰고 나머지 결과를 반환합니다.

Sum

지정된 필드에 있는 값의 합계 반환

Take

반환할 결과의 수 지정

Where

지정한 기준과 일치하는 모든 문서 반환

LINQ 쿼리를 실행하면 .NET/C# 드라이버가 자동으로 쿼리를 MongoDB 쿼리 API로 작성된 집계 파이프라인으로 변환합니다. ToString() 메서드 또는 LoggedStages 속성을 사용하여 변환된 쿼리를 볼 수 있습니다.

스칼라가 아닌 연산에 대해 변환된 쿼리를 보려면 ToString() 메서드를 사용합니다. 스칼라가 아닌 연산은 다음과 같이 쿼리 객체를 반환하는 연산입니다:

  • Where

  • Select

  • SelectMany

  • GroupJoin

다음 예시에서는 LINQ 쿼리에서 ToString() 메서드를 호출하고 변환된 쿼리를 출력합니다.

var queryableCollection = _restaurantsCollection.AsQueryable();
var query = queryableCollection
.Where(r => r.Name == "The Movable Feast");
var queryTranslated = query.ToString();
Console.WriteLine(queryTranslated);
sample_restaurants.restaurants.Aggregate([{ "$match" : { "name" : "The Movable Feast" } }])

스칼라 작업에 대한 변환된 쿼리를 얻으려면 LoggedStages 속성을 사용하세요. 스칼라 연산은 다음과 같이 쿼리 객체가 아닌 스칼라 결과를 반환하는 연산입니다.

  • First

  • Sum

  • Count

  • Min

  • Max

LoggedStages 속성으로 변환된 쿼리를 가져오려면 변환된 쿼리를 실행한 직후, 그리고 동일한 쿼리 가능한 객체를 가진 다른 쿼리를 실행하기 전에 변환된 쿼리를 저장해야 합니다.

다음 예시에서는 스칼라 연산을 사용하는 LINQ 쿼리에서 LoggedStages 속성을 사용한 다음 변환된 쿼리를 인쇄합니다.

var queryableCollection = _restaurantsCollection.AsQueryable();
var query = queryableCollection
.Where(r => r.Name == "The Movable Feast");
var result = query.FirstOrDefault();
var queryTranslated = query.LoggedStages;
Console.WriteLine(queryTranslated.ToJson());
[{ "$match" : { "name" : "The Movable Feast" } }, { "$limit" : NumberLong(1) }]

중요

LoggedStages 는 스레드로부터 안전하지 않습니다. 쿼리를 실행하고 여러 스레드에서 관련 LoggedStages 속성에 액세스하면 결정적이지 않은 결과가 발생할 수 있습니다.

돌아가기

집계