クエリを指定する
Overview
このガイドでは、MongoDB .NET/C# ドライバーを使用してクエリを指定する方法を学習できます。
クエリフィルターを作成すると、クエリによって返される一致するドキュメントのセットを絞り込むことができます。 クエリフィルターは、読み取り、更新、または削除操作で一致するドキュメントを指定する 式 です。
注意
LINQ の使用
このガイドでは、 クエリ フィルター を使用してクエリを指定する方法を説明します。 LINQ を使用してクエリを指定することもできます。 LINQ の使用の詳細については、「 LINQ 」を参照してください。
このガイドの例では、 guitars
というコレクション内の次のドキュメントを使用します。
{ "_id": 1, "make": "Fender", "models": ["Stratocaster", "Telecaster"], "establishedYear": 1946, "rating": 9 } { "_id": 2, "make": "Gibson", "models": ["Les Paul", "SG", "Explorer"], "establishedYear": 1902, "rating": 8 } { "_id": 3, "make": "PRS", "models": ["Silver Sky", "SE", "Custom"], "establishedYear": 1985, "rating": 9 } { "_id": 4, "make": "Kiesel", "models": ["Ares", "Vader", "Solo"], "establishedYear": 2015 } { "_id": 5, "make": "Ibanez", "models": ["RG", "AZ"], "establishedYear": 1957, "rating": 7 } { "_id": 6, "make": "Strandberg", "models": ["Boden", "Salen"], "establishedYear": 1982 }
次のGuitar
クラスは、このコレクション内のドキュメントをモデル化します。
public class Guitar { public int Id { get; set; } public string Make { get; set; } public List<string> Models { get; set; } public int EstablishedYear { get; set; } public int? Rating { get; set; } }
注意
guitars
コレクションのドキュメントは、キャメル ケースの命名規則を使用します。このガイドの例では、ConventionPack
を使用してコレクション内のフィールドをパスカル ケースに逆シリアル化し、Guitar
クラスのプロパティにマップします。
カスタム直列化について詳しくは、「カスタム直列化」を参照してください。
クラスマッピングの詳細については、「クラスマッピング 」を参照してください。
次のコードでは、 Guitar
クラスを型パラメータとして使用して_guitarsCollection
オブジェクトをインスタンス化します。 この型パラメータにより、ドライバーは MongoDB との間で送受信するドキュメントを自動的に直列化および逆直列化しGuitar
。
private static IMongoCollection<Guitar> _guitarsCollection;
リテラル値
リテラル値クエリは、クエリフィルターに完全に一致するドキュメントを返します。
次の例えでは、 Find()
メソッドのパラメーターとしてクエリフィルターを指定します。 クエリは、 make
フィールドが「Fender」に等しいすべてのドキュメントと一致します。
// Finds all documents with a "make" value of "Fender" var results = _guitarsCollection.Find(g => g.Make == "Fender").ToList(); foreach (var doc in results) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }
次の例では、ビルダーを使用して、前の例と同じドキュメントに一致するクエリフィルターを作成しています。
// Creates a filter for all documents with a "make" value of "Fender" var filter = Builders<Guitar>.Filter.Eq(g => g.Make, "Fender"); // Finds all documents that match the filter var result = _guitarsCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 }
Tip
すべてのドキュメントの検索
コレクション内のすべてのドキュメントを一致させるには、空のクエリフィルターを使用します。 次のように、ビルダを使用して空のクエリフィルターを作成します。
var result = _guitarsCollection.Find(Builders<Guitar>.Filter.Empty).ToList();
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
比較演算子
比較演算子は、ドキュメント内の値をクエリフィルターで指定された値に照らして分析します。 一般的な比較演算子には、次のようなものがあります。
演算子 | ビルダ | 説明 |
---|---|---|
> | Gt() | より大きい |
<= | Lte() | 以下 |
!= | Ne() | 等しくない |
演算子の完全なリストについては、 比較クエリ演算子ページをご覧ください。
次の例えでは、 Find()
メソッドのパラメーターとしてクエリフィルターを指定します。 クエリは、 establishedYear
フィールドが1985
より大きいすべてのドキュメントと一致します。
// Finds all documents with am "establishedYear" value greater than 1985 var results = _guitarsCollection.Find(g => g.EstablishedYear > 1985).ToList(); foreach (var doc in results) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }
次の例では、ビルダーを使用して、前の例と同じドキュメントに一致するクエリフィルターを作成しています。
// Creates a filter for all documents with an "establishedYear" value greater // than 1985 var filter = Builders<Guitar>.Filter.Gt(g => g.EstablishedYear, 1985); // Finds all documents that match the filter var result = _guitarsCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
論理演算子
論理演算子は、2 つ以上の式のセットの結果に適用されたロジックを使用してドキュメントと一致します。 以下は、いくつかの論理演算子のリストです。
演算子 | ビルダ | 説明 |
---|---|---|
&& | And() | すべての式は true と評価される必要があります。 |
|| | Or() | 少なくとも 1 つの式が true と評価する必要があります。 |
論理演算子の完全なリストについては、「論理クエリ演算子」ページを参照してください。
次の例えでは、 Find()
メソッドのパラメーターとしてクエリフィルターを指定します。 クエリは、 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 = _guitarsCollection.Find(g => g.EstablishedYear >= 1985 && r.Make != "Kiesel").ToList(); foreach (var doc in results) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
次の例では、ビルダーを使用して、前の例と同じドキュメントに一致するクエリフィルターを作成しています。
// Creates a filter for all documents with an "establishedYear" value greater // than 1985 and a "make" value that does not equal "Kiesel" var builder = Builders<Guitar>.Filter; var filter = builder.And(builder.Gte(g => g.EstablishedYear, 1985), builder.Ne(r => r.Make, "Kiesel")); // Finds all documents that match the filter var result = _guitarsCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 }
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
配列演算子
配列演算子は、配列フィールド内の要素の値または量に基づいてドキュメントを一致させます。 以下は、配列演算子を使用するビルダ メソッドのリストです。
演算子 | 説明 |
---|---|
All() | 配列フィールドがクエリで指定されたすべての要素を含んでいる場合は、ドキュメントと一致します。 |
Any() | 配列フィールド内のいずれかの要素が指定されたクエリフィルターに一致する場合は、ドキュメントと一致します。 |
Size() | 配列フィールドが指定されたサイズの場合に、ドキュメントと一致します。 |
注意
Any()
ビルダは$elemMatch
クエリ演算子を使用します。
$elemMatch
クエリ セレクターの詳細については、 $elemMatch を参照してください。
配列演算子の詳細については、「配列クエリ演算子」ページを参照してください。
次の例では、ビルダーを使用して、 models
フィールドに 3 つの要素を持つすべてのドキュメントに一致するクエリフィルターを作成します。
// Creates a filter for all documents with 3 elements in the "models" field var filter = Builders<Guitar>.Filter.Size(g => g.Models, 3); // Finds all documents that match the filter var result = _guitarsCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 } { "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 } { "_id" : 4, "make" : "Kiesel", "models" : ["Ares", "Vader", "Solo"], "establishedYear" : 2015, "rating" : null }
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
要素演算子
要素演算子は、フィールドの存在または型に基づいてデータをクエリします。
要素演算子の完全なリストについては、「要素クエリ演算子」ページを参照してください。
次の例では、ビルダーを使用して、 rating
フィールドを持つすべてのドキュメントに一致するクエリフィルターを作成します。
// Creates a filter for all documents with a populated "ratings" field var filter = Builders<Guitar>.Filter.Exists(g => g.Rating); // Finds all documents that match the filter var result = _guitarsCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 1, "make" : "Fender", "models" : ["Stratocaster", "Telecaster"], "establishedYear" : 1946, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 } { "_id" : 3, "make" : "PRS", "models" : ["Silver Sky", "SE", "Custom"], "establishedYear" : 1985, "rating" : 9 } { "_id" : 5, "make" : "Ibanez", "models" : ["RG", "AZ"], "establishedYear" : 1957, "rating" : 7 }
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
評価演算子
評価演算子は、個々のフィールドのデータ、またはコレクションのドキュメント全体のデータを分析します。 評価演算子を使用する一部のビルダ メソッドには、 Regex()
やText()
などがあります。
評価演算子の完全なリストについては、「評価クエリ演算子」ページを参照してください。
次の例では、ビルダーを使用して、 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 = _guitarsCollection.Find(filter).ToList(); foreach (var doc in result) { // Prints the documents in bson (json) format Console.WriteLine(doc.ToBsonDocument()); }
{ "_id" : 2, "make" : "Gibson", "models" : ["Les Paul", "SG", "Explorer"], "establishedYear" : 1902, "rating" : 8 }
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
詳細情報
このガイドで言及されている演算子の詳細については、次のサーバー マニュアル エントリを参照してください。
ビルダの使用の詳細については、「 ビルダを使用した操作 」を参照してください。
LINQ を使用してクエリを指定する方法については、「LINQ」を参照してください。