Overview
このガイドでは、 MongoDB .NET/ C#ドライバーを使用してクエリフィルターを作成する方法を学習できます。クエリフィルターは、 CRUD操作において読み取り、更新、または削除するドキュメントを指定する式です。Builders<TDocument>.Filter
静的プロパティから利用可能なビルダ メソッドを使用して、クエリフィルターを作成し、それに操作を追加できます。
注意
メソッドのオーバーロード
このページのメソッドの多くには、複数のオーバーロードがあります。 このガイドの例では、各メソッドの 1 つの定義のみを示します。 利用可能なオーバーロードの詳細については、 APIドキュメントを参照してください。
サンプル データ
このガイドの例では、 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
コレクションへの参照を取得する必要があります。
var client = new MongoClient("localhost://27017"); var guitarCollection = client.GetDatabase("example").GetCollection<Guitar>("guitars");
すべてのドキュメントの検索
空のクエリフィルターは、コレクション内のすべてのドキュメントと一致します。次の例は、空のクエリフィルターを作成する方法を示しています。
var filter = Builders<Guitar>.Filter.Empty;
比較演算子
比較演算子は、クエリ値を指定されたフィールド内の値と比較します。これらのメソッドの一部には、次の例に示すように、 メソッドの代わりに使用できる代替構文があります。
var filter = Builders<Guitar>.Filter.Eq(g => g.Make, "Fender"); var results = guitarCollection.Find(filter).ToList(); // Alternative syntax var results = guitarCollection.Find(g => g.Make == "Fender").ToList();;
次の表は、比較操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 代替構文 | 説明 | MongoDB Server演算子 |
---|---|---|---|
|
| 指定されたフィールドの値がクエリ値と等しいドキュメントと一致します。 | |
|
| 指定フィールドの値がクエリ値を超えるドキュメントと一致します。 | |
|
| 指定された配列フィールド内のいずれかの要素がクエリ値以上のドキュメントと一致します。 | |
| 該当なし | 指定された配列フィールド内のいずれかの要素がクエリ配列内の任意の値と一致するドキュメントと一致します。 | |
|
| 指定された配列フィールド内のいずれかの要素がクエリ値より小さいドキュメントと一致します。 | |
|
| 指定された配列フィールド内のいずれかの要素がクエリ値以下のドキュメントと一致します。 | |
|
| 指定された配列フィールド内のどの要素もクエリ値と等しくないドキュメントと一致します。 | |
| 該当なし | 次のいずれかに当てはまるドキュメントと一致します。
| |
| 該当なし | 指定されたフィールドの string 値がクエリ配列内の任意の string 値と一致するドキュメントと一致します。 | |
| 該当なし | 指定されたフィールドの string 値がクエリ配列内の string 値のいずれとも一致しないドキュメントと一致します。 |
次の例では、Find()
メソッドを呼び出し、Lambda フィルターを渡します。これはドライバーがクエリフィルターに変換します。クエリは、establishedYear
フィールドが 1985
より大きいすべてのドキュメントと一致します。
// Finds all documents with an "establishedYear" value greater than 1985 var results = guitarCollection.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 = guitarCollection.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 }
次の例では、Find()
メソッドを呼び出し、 Lambda式を渡します。これはドライバーがクエリフィルターに変換するものです。 クエリは、make
フィールドが「Fender」に等しいすべてのドキュメントと一致します。
// Finds all documents with a "make" value of "Fender" var results = guitarCollection.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 = guitarCollection.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 }
論理演算子
論理演算子は、2 つ以上の式を組み合わせて、それらの式の結果に基づいて結果を返します。これらのメソッドには、次の例に示すように、 メソッドの代わりに使用できる代替構文があります。
var builder = Builders<Guitar>.Filter; var filter = builder.And( builder.Gte(g => g.EstablishedYear, 1985), builder.Ne(r => r.Make, "Kiesel")); var results = guitarCollection.Find(filter).ToList(); // Alternative syntax var results = guitarCollection.Find( g => g.EstablishedYear >= 1985 && g.Make != "Kiesel") .ToList();
次の表は、論理演算用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 代替構文 | 説明 | MongoDB Server演算子 |
---|---|---|---|
|
| すべての式が true と評価されるドキュメントと一致します。 | |
|
| 1 つ以上の式が true と評価されるドキュメントに一致します。 |
次の例では、Find()
メソッドを呼び出し、 Lambda式を渡します。これはドライバーがクエリフィルターに変換するものです。 クエリは、establishedYear
フィールドが 1985
以上で、かつ make
フィールドが「Keyel」と等しくないすべてのドキュメントと一致します。
// Finds all documents with an "establishedYear" value greater than 1985 // and a "make" value that is not equal to "Kiesel" var results = guitarCollection.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 = guitarCollection.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 }
配列演算子
配列演算子は、 配列フィールド内の要素の値または量に基づいてドキュメントを一致させます。次の表は、配列操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 説明 | MongoDB Server演算子 |
---|---|---|
| 指定された配列フィールドの値がすべてのクエリ値と一致するドキュメントと一致します。 | |
| 指定された配列フィールド内のいずれかの要素がクエリ値と一致するドキュメントと一致します。 | |
| 指定された配列フィールド内のいずれかの要素がクエリ値を超えるドキュメントと一致します。 | |
| 指定された配列フィールド内のいずれかの要素がクエリ値以上のドキュメントと一致します。 | |
| 指定された配列フィールド内のいずれかの要素がクエリ配列内の任意の値と一致するドキュメントと一致します。 | |
| 指定された配列フィールド内のいずれかの要素がクエリ値より小さいドキュメントと一致します。 | |
| 指定された配列フィールド内のいずれかの要素がクエリ値以下のドキュメントと一致します。 | |
| 指定された配列フィールド内のどの要素もクエリ値と等しくないドキュメントと一致します。 | |
| 次のいずれかに当てはまるドキュメントと一致します。
| |
| 指定された配列フィールド内のいずれかの string 要素がクエリ配列内の任意の string 値と一致するドキュメントと一致します。 | |
| 次のいずれかに当てはまるドキュメントと一致します。
| |
| 指定された配列フィールド内のいずれかの要素がクエリ条件に一致するドキュメントと一致します。 | |
| 指定された配列フィールドが指定されたサイズであるドキュメントと一致します。 | |
| 指定された配列フィールドが指定されたサイズを超えるドキュメントと一致します。 | |
| 指定された配列フィールドが指定されたサイズ以上のドキュメントと一致します。 | |
| 指定された配列フィールドが指定されたサイズより小さいドキュメントと一致します。 | |
| 指定された配列フィールドが指定されたサイズ以下のドキュメントと一致します。 |
次の例では、ビルダーを使用して、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 = guitarCollection.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 }
要素演算子
要素演算子は、フィールドの存在または型に基づいて、ドキュメントクエリ データと一致します。次の表は、要素操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 説明 | MongoDB Server演算子 |
---|---|---|
| 指定されたフィールドを含む、または含まないドキュメントと一致します(フィールド値が | |
| 指定されたフィールドの値が指定されたBSON types のインスタンスであるドキュメントと一致します。 |
次の例では、ビルダーを使用して、 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 = guitarCollection.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 }
評価演算子
評価演算子は、コレクション内の個々のフィールドまたはすべてのドキュメントのデータを分析します。次の表は、評価操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 説明 | MongoDB Server演算子 |
---|---|---|
| 指定されたJSON スキーマを満たすドキュメントと一致します。 | |
| 指定されたフィールドの値を除数で割った値が指定された余り(剰余)を持つドキュメントと一致します。 | |
| 指定されたフィールドの値が指定された 正規式と一致するドキュメントと一致します。 | |
| を使用して、 JavaScript式を含む string または完全なJavaScript関数をクエリ システムに渡します。 |
次の例では、ビルダーを使用して、 make
フィールドの値が文字「G」で始まるすべてのドキュメントに一致するクエリフィルターを作成します。
// 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 = guitarCollection.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 }
地理空間演算子
地理空間演算子は、地理空間式条件に基づいてデータを返します。次の表は、地理空間操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 説明 | MongoDB Server演算子 |
---|---|---|
| 地理空間データが指定されたGeoJsonObjectと交差するドキュメントと一致します。 | |
| 地理空間データが指定された形状内に完全にあるドキュメントと一致します。 | |
| 地理空間データが指定されたボックス内に完全にあるドキュメントと一致します。 | |
| 地理空間データが指定された円内に完全にあるドキュメントと一致します。 | |
| 地理空間データが指定された球体内に完全にあるドキュメントと一致します。 | |
| 地理空間データが指定された多角形内に完全にあるドキュメントと一致します。 | |
| 地理空間 クエリの基準となる点を指定します。この地点をもとに、指定した地点から最も近いドキュメントから最も遠いドキュメントの順に地理空間クエリによりドキュメントが返されます。 | |
| 地理空間 クエリの基準となる点をもとに、指定した地点から最も近いドキュメントから最も遠いドキュメントの順に球面ジオメトリでドキュメントが返されます。 |
ビット演算子
ビット演算子は、ビット位置条件に基づいてドキュメントを一致させます。次の表は、ビット単位の操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。
.NET/ C#ドライバー メソッド | 説明 | MongoDB Server演算子 |
---|---|---|
| 指定されたフィールドで指定されたビット位置がすべてクリアされているドキュメント( | |
| 指定されたすべてのビット位置が指定されたフィールドに設定されているドキュメントと一致します( | |
| 指定されたフィールドで指定されたビット位置のいずれかがクリアされているドキュメント( | |
| 指定されたフィールドに指定されたビット位置のいずれかが設定されているドキュメントと一致します( |
その他の演算子
.NET/ C#ドライバーには、フィルター定義を作成する次のメソッドも用意されています。
.NET/ C#ドライバー メソッド | 説明 |
---|---|
| 指定された型から派生した型のドキュメントと一致します。このメソッドのオーバーロードを使用して、追加のクエリ条件を指定できます。 |
| 指定された string を含むフィールドを持つドキュメントと一致します。 |
詳細情報
このページのドライバー メソッドの詳細については、 <TDocument>[]クラスのAPIドキュメントを参照してください。