MongoDBでタイプ(サブタイプ)別にBinDataをクエリする方法
MongoDBでは、subtype()メソッドを使うことで、BinData(バイナリデータ)をサブタイプ別にクエリできます。この記事では、実際のコード例を通じて、その具体的な手順を解説します。
1. テスト用コレクションの作成
まず、異なるサブタイプを持つBinDataドキュメントを含むコレクションを作成しましょう。以下の例では「demo249」というコレクションに、サブタイプ0(汎用バイナリ)、サブタイプ4(UUID)、サブタイプ3(旧UUID)の3つのドキュメントを挿入しています。
> db.demo249.insertOne({ "_id" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv") });
{
"acknowledged" : true,
"insertedId" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv")
}
> db.demo249.insertOne({"_id" : BinData(4,"CNDF66qIlCY92q1vFAAAAQ==")});
{
"acknowledged" : true,
"insertedId" : UUID("08d0c5eb-aa88-9426-3dda-ad6f14000001")
}
> db.demo249.insertOne({"_id" : BinData(3,"CNDF66qJ29g92q1vFAAAEw==")});
{
"acknowledged" : true,
"insertedId" : BinData(3,"CNDF66qJ29g92q1vFAAAEw==")
}2. コレクション内の全ドキュメントを確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.demo249.find();
実行すると、以下のような出力が得られます。
{ "_id" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }
{ "_id" : UUID("08d0c5eb-aa88-9426-3dda-ad6f14000001") }
{ "_id" : BinData(3,"CNDF66qJ29g92q1vFAAAEw==") }ご覧のとおり、3つのドキュメントはそれぞれ異なるサブタイプ(0、4、3)のバイナリデータとして格納されています。
3. サブタイプを指定してBinDataをクエリ
特定のタイプのBinDataだけを抽出したい場合は、find()の中に関数を渡し、その中でthis._id.subtype()を使って条件判定を行います。
たとえば、サブタイプが「0」のドキュメントのみを取得するには、次のように記述します。
> db.demo249.find(function(){ return this._id.subtype() == 0 });このクエリを実行すると、以下の出力が得られます。
{ "_id" : BinData(0,"AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }結果からわかるように、サブタイプ0のドキュメントだけが正しくフィルタリングされて返されています。
補足:BinDataの主なサブタイプ
MongoDBのBinDataには、用途に応じた複数のサブタイプが定義されています。代表的なものは以下のとおりです。
- 0: 汎用バイナリデータ(Generic binary data)
- 1: 関数データ(Function)
- 3: 旧形式のUUID(Old UUID / Legacy UUID)
- 4: UUID(標準準拠の新しいUUID)
- 5: MD5ハッシュ
- 128〜255: ユーザー定義型
このように、subtype()を活用すれば、保存されているバイナリデータの種類を判別し、柔軟にクエリを実行することが可能です。UUIDの新旧形式が混在している環境などで特に役立つテクニックなので、ぜひ覚えておきましょう。
-
MongoDBでコレクションの名前を変更する方法(renameCollectionの使い方)
MongoDBで既存のコレクションの名前を変更したい場合、renameCollection()メソッドを使用します。この記事では、実際にコレクションを作成し、その名前を変更するまでの手順を順番に解説します。1. ドキュメントを含むコレクションを作成するまず、insertOne()メソッドを使ってサンプルドキュメントを挿入し、コレクション「demo690」を作成します。> db.demo690.insertOne({_id:101,Name:Sam}); { acknowledged : true, insertedId : 101 } > db.demo690.insertOne(
-
MongoDBで埋め込みドキュメント(配列内のサブドキュメント)をクエリする方法
MongoDBの埋め込みドキュメントをクエリするには?MongoDBでは、ドキュメントの中に配列として埋め込まれたサブドキュメントをクエリする場合、aggregate()メソッドを使用するのが効果的です。この記事では、$unwindと$matchを組み合わせて、埋め込みドキュメントから条件に合うデータを抽出する手順を解説します。1. サンプルコレクションの作成まずは、学生情報を配列として持つドキュメントを含むコレクションを作成しましょう。insertOne()メソッドを使ってドキュメントを挿入します。> db.demo705.insertOne( ... { ...