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

LINQ

項目一覧

  • Overview
  • コレクションをクエリ可能にします
  • サポートされている集計ステージ
  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • ネストされたステートメント
  • $group
  • $sort
  • $lookup
  • $vectorSearch
  • ビット演算子
  • $bitAnd
  • $bitOr
  • $bitNot
  • $bitXor
  • サポートされていない集計ステージ
  • サポートされているメソッド
  • 変換されたクエリの表示

このガイドでは、 MongoDB .NET/ C#ドライバーで LINQ を使用する方法を説明します。LINQ では、言語キーワードと演算子を使用して、厳密に型指定されたオブジェクト コレクションを対象にクエリを作成できます。 .NET/ C#ドライバーは、LINQ クエリを自動的に集計操作 に変換します。

重要

LINQ3 は MongoDB .NET/C# ドライバーで利用できる唯一の LINQ プロバイダーです。LINQ2 を使用するようにプロジェクトを手動で設定した場合、コンパイルされません。

このガイドの例では、Atlas サンプル データセットで提供されている sample_restaurants データベースの restaurants コレクションを使用します。無料の MongoDB Atlas クラスターを作成し、サンプル データセットをロードする方法については、 クイック スタートを参照してください。

次の RestaurantAddress、およびGradeEntry クラスは、このコレクション内のドキュメントをモデル化します。

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();

クエリ可能なオブジェクトを取得したら、メソッド構文を使用してクエリを作成できます。一部のパイプライン ステージでは、SQL クエリ構文に似たクエリ理解構文もサポートされています。

LINQ を使用してクエリを作成する方法を確認するには、Method Syntax または Query Syntax タブを選択します。

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" } }

Tip

クエリ結果へのアクセス

ToList() または ToCursor() メソッドを使用してクエリの結果にアクセスすることもできます。

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

LINQ を使用して集計パイプラインを作成できます。 .NET/C# ドライバーは、各 LINQ ステートメントを対応する集計パイプライン ステージに自動的に変換します。 このセクションでは、どの 集計パイプライン ステージ がサポートされているかを学習できます。

集計パイプライン ステージの詳細については、サーバー マニュアルの「集計ステージ」ページを参照してください。

$project 集計ステージでは、指定されたフィールドのみを含むドキュメントが返されます。

LINQ を使用して $project ステージを生成する方法を確認するには、 Method Syntax または Query Syntax タブを選択します。

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 集計ステージでは、指定された条件に一致するドキュメントが返されます。

LINQ を使用して $match ステージを生成する方法を確認するには、 Method Syntax または Query Syntax タブを選択します。

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);

上記の例では、条件に一致する最初の 2 つのレストランをスキップし、残りを返します。結果には、次のドキュメントが含まれています。

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

$unwind 集計ステージでは、指定された配列フィールドを分解し、その配列内の各要素のドキュメントを返します。

LINQ を使用して $unwind ステージを生成する方法を確認するには、Method Syntax または Query Syntax タブを選択します。

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 Restaurantgradesクラスで表されるドキュメントの配列を保持する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 集計ステージでは、指定した基準に従ってドキュメントをグループに分割します。

LINQ を使用して $group ステージを生成する方法を確認するには、Method Syntax または Query Syntax タブを選択します。

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 集計ステージでは、指定した順序でクエリの結果が返されます。

LINQ を使用して $sort ステージを生成する方法を確認するには、Method Syntax または Query Syntax タブを選択します。

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 フィールドでアルファベット順に並べ替えられ、RestaurantId フィールドで 2 次降順で並べ替えられたクエリ結果が返されます。以下は返された結果に含まれるドキュメントのサブセットです。

// 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 集計ステージでは、1 つのコレクションのドキュメントを同じデータベース内の別のコレクションのドキュメントに結合します。$lookup ステージでは、各入力ドキュメントに新しい配列フィールドが追加されます。新しい配列フィールドには、結合済みコレクションと一致するドキュメントが含まれます。

注意

ルックアップを実行するには、 AsQueryable()メソッドを使用して両方のコレクションをクエリ可能にする必要があります。

コレクションをクエリ可能にする方法については、「 コレクションをクエリ可能にする 」を参照してください。

sample_restaurants データベース内のレストランのレビューを含む reviews という 2 番目のコレクションについて考えてみましょう。$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; }
}

LINQ を使用して$lookupステージを生成する方法を確認するには、 Method SyntaxタブまたはQuery Syntaxタブを選択します。

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 集計ステージは、指定されたフィールド内のベクトルに対して近似最近傍探索を実行します。データに対してベクトル検索を実行する前に、コレクションに定義された Atlas Vector Search インデックスが必要です

Tip

次の例で使用されるサンプル データセットを取得するには、「クイック スタート」を参照してください。 次の例で使用されるサンプル 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; }
}

次の例は、文字列 "time travel" のベクトル埋め込みを使用して plot_embedding フィールドを検索する $vectorSearch ステージを生成する方法を示しています。

// 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 は 2 つ以上のオペランドを受け取ります。$bitNot は 1 つのオペランドを受け取ります。

  • ビット演算は左から右に評価されます。

このセクションの例では、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; }
}

注意

欠落または未定義の演算子

ビット演算子に渡すオペランドが nullableint またはlong で、欠落値または未定義の値を含む場合、式全体はnull と評価されます。オペランドのタイプが nullable 以外の int または long で、欠落値または未定義の値を含む場合、 .NET/ C#ドライバーはエラーをスローします。

$bitAnd集計演算子は、指定された引数に対してビット単位の AND操作を実行します。& 文字の 句を 2 つ以上接続することで、$bitAnd 演算子を使用できます。

次の例は、LINQ を使用して $bitAnd ステージを作成する方法を示しています。このコードでは、Nameフィールドの値が "watermelon" であるドキュメントが検索されます。次に、このドキュメントの IsAvailable フィールドと IsCheap フィールドの値に対してビット単位の 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操作を実行します。| 文字の 句を 2 つ以上接続することで、$bitOr 演算子を使用できます。

次の例は、LINQ を使用して $bitOr ステージを作成する方法を示しています。このコードでは、Nameフィールドの値が "onions" であるドキュメントが検索されます。次に、このドキュメントの IsAvailable フィールドと IsCheap フィールドの値に対してビット単位の OR操作を実行します。

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

上記のコードでは、IsAvailableフィールド(1 )と IsCheapフィールド( 0 )の値に対する OR操作の結果である 1 が返されます。

$bitNot集計演算子は、指定された引数に対してビット単位の NULL操作を実行します。オペランドの前に ~ 文字を付けることで、$bitNot 演算子を使用できます。$bitNot は引数を 1 つだけ取ります。次の例は、LINQ を使用して $bitNot ステージを作成する方法を示しています。

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

$bitXor集計演算子は、指定された引数に対してビット単位の XOR操作を実行します。^ 文字の 句を 2 つ以上接続することで、$bitXor 演算子を使用できます。

次の例は、LINQ を使用して $bitXor ステージを作成する方法を示しています。このコードは、Nameフィールドの値が "watermelon" または "onions" であるドキュメントを検索します。次に、これらのドキュメントの IsAvailable フィールドと IsCheap フィールドの値に対してビット単位の XOR操作を実行します。

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

結果には、次の値が含まれています。

0
1

MongoDB .NET/C# ドライバーの LINQ 実装では、次の集計ステージはサポートされていません。

  • $redact

  • $geoNear

  • $out

ビルダーを使用して、 $outステージで集計パイプラインを作成する方法については、「パイプライン結果をコレクションに書き込む 」セクションを参照してください。

以下は、 MongoDB .NET/ C#ドライバーの LINQ実装でサポートされているメソッドの一部です。

メソッド名
説明

Any

指定された条件に一致するドキュメントがあるかどうかを判定します

Average

指定されたフィールドの平均を計算します

Count

指定された条件に一致するドキュメントの数を表す Int32 を返します。

LongCount

指定された条件に一致するドキュメントの数を表す Int64 を返します。

DateFromString

stringDateTimeオブジェクトに変換する

Distinct

指定された条件に一致する個別のドキュメントを返します

Exists

フィールドが存在するかどうかをテストします

First

最初に一致するドキュメントを返し、見つからない場合は例外をスローします。

FirstOrDefault

最初に一致するドキュメントを返します。見つからない場合は null を返します。

GroupBy

指定した条件に基づいてドキュメントをグループ化します

GroupJoin

同じデータベース内の別のコレクションへの左外部結合を実行します

IsMissing

フィールドが欠落しており、それ以外が false の場合は true を返します

IsNullOrMissing

フィールドが null または欠落しており、それ以外の場合に false の場合は true を返します

Max

指定された最大値を持つドキュメントを返します

OfType

指定した型に一致するドキュメントを返します

OrderBy, OrderByDescending

指定されたソート順序で結果を返します

ThenBy, ThenByDescending

二次ソートを指定できるようにします

Select

指定された基準に基づいてドキュメントを選択します

SelectMany

シーケンスの各要素を投影し、結果のシーケンスを 1 つのドキュメントに結合します。

Single

一致するドキュメントのみを返し、ドキュメントが1つだけない場合は例外をスローします

SingleOrDefault

一致するドキュメントを 1 つ返すか、一致するドキュメントがない場合は null を返します。

Skip

指定された数の文書をスキップし、残りの結果を返します

Sum

指定されたフィールドの値の合計を返します

Take

返される結果の数を指定します

Where

指定した条件に一致するすべてのドキュメントを返します

LINQ クエリを実行すると、.NET/C# ドライバーはクエリを MongoDB Query 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 プロパティにアクセスすると、結果が不確定になる場合があります。

戻る

集計