MongoDBで配列内に値を含まないドキュメントを照合するには?$nin演算子の使い方
MongoDBでは、配列フィールドが特定の値を含まないドキュメントを検索したい場合、$nin 演算子を使用します。$nin は「not in」を意味し、指定した配列内のいずれの値とも一致しないドキュメントだけを抽出することができます。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.demo180.insertOne({"Scores":["80","90","110"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3988a69e4f06af551997fb")
}
> db.demo180.insertOne({"Scores":["110","70","60"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3988b79e4f06af551997fc")
}
> db.demo180.insertOne({"Scores":["40","70","1010"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3988cc9e4f06af551997fd")
}登録済みドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo180.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e3988a69e4f06af551997fb"), "Scores" : [ "80", "90", "110" ] }
{ "_id" : ObjectId("5e3988b79e4f06af551997fc"), "Scores" : [ "110", "70", "60" ] }
{ "_id" : ObjectId("5e3988cc9e4f06af551997fd"), "Scores" : [ "40", "70", "1010" ] }$nin を使ったドキュメントの照合
次に、配列フィールド Scores 内に「110」と「90」のいずれも含まないドキュメントを照合するクエリを見てみましょう。集計パイプラインの $match ステージと組み合わせて $nin を使用します。
> db.demo180.aggregate({ "$match": { "Scores": { "$nin": ["110","90"] } } }).pretty();このクエリを実行すると、以下の出力が得られます。
{
"_id" : ObjectId("5e3988cc9e4f06af551997fd"),
"Scores" : [ "40", "70", "1010" ]
}結果の解説
出力結果を見ると、「110」または「90」を含む最初と2番目のドキュメントは除外され、どちらの値も含まない3番目のドキュメントのみが返されていることがわかります。
$nin 演算子は、配列フィールドに対して「指定した値がひとつでも含まれていたら除外する」という動作をするため、ブラックリスト方式のフィルタリングに非常に便利です。find() メソッドでも同様に利用できるため、用途に応じて使い分けるとよいでしょう。
-
MongoDBのAggregationで$matchと$andを使って複数の値を照合する方法
MongoDBのAggregationで$matchと$andを使って複数の値を照合する方法 MongoDBで複数の条件の「すべて」に一致するドキュメントを抽出したい場合には、Aggregationパイプラインの$matchステージと$and演算子を組み合わせます。本記事では、ネストされたドキュメント構造を持つコレクションを例に、実際のコードを通して具体的な手順を解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、ネストした構造を持つドキュメントを1件挿入し、テスト用のコレクションを作成します。 > db.demo574.insertOne( .
-
$elemMatch演算子を使った配列フィールドを持つドキュメントの検索方法【MongoDB】
MongoDBで配列フィールド内の要素に基づいてドキュメントを検索したい場合、$elemMatch 演算子を使用します。$elemMatch を使うことで、配列内の同一の要素に対して複数の条件を同時に適用できるのが大きな特徴です。この記事では、実際にコレクションを作成し、配列フィールドを含むドキュメントを $elemMatch で照合する手順を解説します。1. テスト用コレクションの作成まず、配列フィールド details を持つドキュメントを挿入して、サンプルコレクションを作成しましょう。> db.demo592.insertOne( ... { ... id:1