MongoDBで_idの配列を取得する方法|$in演算子を使った複数ID検索の基本
MongoDBにおける_idフィールドとは
MongoDBでは、コレクションに保存されるすべてのドキュメントに対して、_idという必須フィールドが存在します。この_idは各ドキュメントを一意に識別するプライマリキーとして機能し、同じコレクション内で重複することはありません。明示的に指定しない場合、MongoDBが自動的にObjectIdを生成して割り当てます。
本記事では、$in演算子を使用して、指定した複数の_id値に一致するドキュメントを配列形式で取得する方法を解説します。
$in演算子を使った_id検索の基本構文
複数の_id値を条件としてドキュメントを取得するには、以下のような構文を使用します。
db.yourCollectionName.find({ _id : { $in : [yourValue1,yourValue2,yourValue3,.......N] } } );$in演算子の配列内に指定した値のいずれかに一致するドキュメントだけが、検索結果として返されます。
サンプルコレクションの作成
まず、動作確認用のコレクションを作成し、テストデータを挿入してみましょう。以下のクエリでは、insertOne()メソッドを使って_idを明示的に指定したドキュメントを6件登録しています。
> db.selectInWhereIdDemo.insertOne({"_id":23});
{ "acknowledged" : true, "insertedId" : 23 }
> db.selectInWhereIdDemo.insertOne({"_id":28});
{ "acknowledged" : true, "insertedId" : 28 }
> db.selectInWhereIdDemo.insertOne({"_id":45});
{ "acknowledged" : true, "insertedId" : 45 }
> db.selectInWhereIdDemo.insertOne({"_id":75});
{ "acknowledged" : true, "insertedId" : 75 }
> db.selectInWhereIdDemo.insertOne({"_id":85});
{ "acknowledged" : true, "insertedId" : 85 }
> db.selectInWhereIdDemo.insertOne({"_id":145});
{ "acknowledged" : true, "insertedId" : 145 }登録済みドキュメントの全件表示
find()メソッドとpretty()メソッドを組み合わせることで、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.selectInWhereIdDemo.find().pretty();
実行すると、以下のように挿入した6件のドキュメントが出力されます。
{ "_id" : 23 }
{ "_id" : 28 }
{ "_id" : 45 }
{ "_id" : 75 }
{ "_id" : 85 }
{ "_id" : 145 }$in演算子で特定の_idだけを抽出する
それでは本題です。$in演算子を使って、配列で指定した_id(ここでは23、45、85、145)に一致するドキュメントのみを取得してみましょう。
> db.selectInWhereIdDemo.find({ _id : { $in : [23,45,85,145] } } );実行結果は以下の通りです。指定した4つの_idに一致するドキュメントだけが返されていることがわかります。
{ "_id" : 23 }
{ "_id" : 45 }
{ "_id" : 85 }
{ "_id" : 145 }まとめ
MongoDBで複数の_idを条件にドキュメントを検索したい場合は、$in演算子が非常に便利です。ポイントを整理すると以下の通りです。
- _idはすべてのドキュメントに必須の一意なプライマリキーである
- $in演算子に配列形式で複数の_id値を渡すことで、該当するドキュメントを一括取得できる
- find()メソッドと組み合わせて使用する
大量のIDリストから特定のレコードだけを取り出したいケースなど、実務でも頻繁に使われるパターンなので、ぜひ覚えておきましょう。
-
MongoDBで配列の共通部分(交差)データを取得する方法
MongoDBで配列の共通部分を取得するには?MongoDBで配列同士の共通要素(交差)を求めたい場合、集計パイプラインである aggregate() 内で $setIntersection 演算子を使用します。この演算子は、指定した複数の配列に共通して含まれる要素だけを抽出し、重複を除いた配列として返してくれます。それでは、実際にドキュメントを含むコレクションを作成しながら確認していきましょう。1. サンプルコレクションの作成> db.demo625.insertOne( ... { ... Name: "John", ... M
-
Pythonで3次元配列の逆テンソルを求める方法【numpy.linalg.tensorinv】
numpy.linalg.tensorinv()とは Pythonで3次元配列(テンソル)の「逆」を計算するには、NumPyのnumpy.linalg.tensorinv()メソッドを使用します。このメソッドは、tensordot演算tensordot(a, b, ind)に対する逆テンソルを返します。つまり、浮動小数点精度の範囲内で、tensordot(tensorinv(a), a, ind)がtensordot演算における「単位」テンソルになるという性質を持ちます。 戻り値はaのtensordot逆テンソルであり、その形状はa.shape[ind:] + a.shape[:ind]となり