Docs Menu

クエリフィルターを作成する

このガイドでは、 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");

注意

guitars コレクションのドキュメントは、キャメル ケースの命名規則を使用します。このガイドの例では、ConventionPack を使用してコレクション内のフィールドをパスカル ケースに逆シリアル化し、Guitar クラスのプロパティにマップします。

カスタム クラスの作成と直列化の詳細については、次のページを参照してください。

空のクエリフィルターは、コレクション内のすべてのドキュメントと一致します。次の例は、空のクエリフィルターを作成する方法を示しています。

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演算子

Eq()

==

指定されたフィールドの値がクエリ値と等しいドキュメントと一致します。

Gt()

>

指定フィールドの値がクエリ値を超えるドキュメントと一致します。

Gte()

>=

指定された配列フィールド内のいずれかの要素がクエリ値以上のドキュメントと一致します。

In()

該当なし

指定された配列フィールド内のいずれかの要素がクエリ配列内の任意の値と一致するドキュメントと一致します。

Lt()

<

指定された配列フィールド内のいずれかの要素がクエリ値より小さいドキュメントと一致します。

Lte()

<=

指定された配列フィールド内のいずれかの要素がクエリ値以下のドキュメントと一致します。

Ne()

!=

指定された配列フィールド内のどの要素もクエリ値と等しくないドキュメントと一致します。

Nin()

該当なし

次のいずれかに当てはまるドキュメントと一致します。

  • 指定された配列フィールド内のどの要素も、クエリ配列内の値のいずれとも一致しません。

  • 指定されたフィールドが存在しない場合。

StringIn()

該当なし

指定されたフィールドの string 値がクエリ配列内の任意の string 値と一致するドキュメントと一致します。

StringNin()

該当なし

指定されたフィールドの 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演算子

And()

&&

すべての式が true と評価されるドキュメントと一致します。

Or()

||

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演算子

All()

指定された配列フィールドの値がすべてのクエリ値と一致するドキュメントと一致します。

AnyEq()

指定された配列フィールド内のいずれかの要素がクエリ値と一致するドキュメントと一致します。

AnyGt()

指定された配列フィールド内のいずれかの要素がクエリ値を超えるドキュメントと一致します。

AnyGte()

指定された配列フィールド内のいずれかの要素がクエリ値以上のドキュメントと一致します。

AnyIn()

指定された配列フィールド内のいずれかの要素がクエリ配列内の任意の値と一致するドキュメントと一致します。

AnyLt()

指定された配列フィールド内のいずれかの要素がクエリ値より小さいドキュメントと一致します。

AnyLte()

指定された配列フィールド内のいずれかの要素がクエリ値以下のドキュメントと一致します。

AnyNe()

指定された配列フィールド内のどの要素もクエリ値と等しくないドキュメントと一致します。

AnyNin()

次のいずれかに当てはまるドキュメントと一致します。

  • 指定された配列フィールド内のすべての要素は、クエリ配列にありません。

  • 指定されたフィールドが存在しない場合。

AnyStringIn()

指定された配列フィールド内のいずれかの string 要素がクエリ配列内の任意の string 値と一致するドキュメントと一致します。

AnyStringNin()

次のいずれかに当てはまるドキュメントと一致します。

  • 指定された配列フィールド内のすべての string 要素は、クエリ配列にありません。

  • 指定されたフィールドが存在しない場合。

ElemMatch()

指定された配列フィールド内のいずれかの要素がクエリ条件に一致するドキュメントと一致します。

Size()

指定された配列フィールドが指定されたサイズであるドキュメントと一致します。

SizeGt()

指定された配列フィールドが指定されたサイズを超えるドキュメントと一致します。

SizeGte()

指定された配列フィールドが指定されたサイズ以上のドキュメントと一致します。

SizeLt()

指定された配列フィールドが指定されたサイズより小さいドキュメントと一致します。

SizeLte()

指定された配列フィールドが指定されたサイズ以下のドキュメントと一致します。

次の例では、ビルダーを使用して、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演算子

Exists()

指定されたフィールドを含む、または含まないドキュメントと一致します(フィールド値が null であるドキュメントを含む)。

Type()

指定されたフィールドの値が指定された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演算子

JsonSchema()

指定されたJSON スキーマを満たすドキュメントと一致します。

Mod()

指定されたフィールドの値を除数で割った値が指定された余り(剰余)を持つドキュメントと一致します。

RegEx()

指定されたフィールドの値が指定された 正規式と一致するドキュメントと一致します。

Where()

を使用して、 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演算子

GeoIntersects()

地理空間データが指定されたGeoJsonObjectと交差するドキュメントと一致します。

GeoWithin()

地理空間データが指定された形状内に完全にあるドキュメントと一致します。

GeoWithinBox()

地理空間データが指定されたボックス内に完全にあるドキュメントと一致します。

GeoWithinCenter()

地理空間データが指定された円内に完全にあるドキュメントと一致します。

GeoWithinCenterSphere()

地理空間データが指定された球体内に完全にあるドキュメントと一致します。

GeoWithinPolygon()

地理空間データが指定された多角形内に完全にあるドキュメントと一致します。

Near()

地理空間 クエリの基準となる点を指定します。この地点をもとに、指定した地点から最も近いドキュメントから最も遠いドキュメントの順に地理空間クエリによりドキュメントが返されます。

NearSphere()

地理空間 クエリの基準となる点をもとに、指定した地点から最も近いドキュメントから最も遠いドキュメントの順に球面ジオメトリでドキュメントが返されます。

ビット演算子は、ビット位置条件に基づいてドキュメントを一致させます。次の表は、ビット単位の操作用の.NET/ C#ドライバー メソッドと同等のMongoDB Server演算子を示しています。

.NET/ C#ドライバー メソッド
説明
MongoDB Server演算子

BitsAllClear()

指定されたフィールドで指定されたビット位置がすべてクリアされているドキュメント(0)と一致します。

BitsAllSet()

指定されたすべてのビット位置が指定されたフィールドに設定されているドキュメントと一致します(1)。

BitsAnyClear()

指定されたフィールドで指定されたビット位置のいずれかがクリアされているドキュメント(0)と一致します。

BitsAnySet()

指定されたフィールドに指定されたビット位置のいずれかが設定されているドキュメントと一致します(1)。

.NET/ C#ドライバーには、フィルター定義を作成する次のメソッドも用意されています。

.NET/ C#ドライバー メソッド
説明

OfType()

指定された型から派生した型のドキュメントと一致します。このメソッドのオーバーロードを使用して、追加のクエリ条件を指定できます。

Text()

指定された string を含むフィールドを持つドキュメントと一致します。

このページのドライバー メソッドの詳細については、 <TDocument>[]クラスのAPIドキュメントを参照してください。