NumberInt()で設定されたフィールド値を持つ特定のドキュメントを取得するMongoDBクエリ
NumberInt()は、MongoDBで32ビット整数を明示的に指定するための関数です。シェルから数値を挿入すると通常は倍精度浮動小数点数(double)として扱われますが、NumberInt()を使えば値を明確に32ビット整数型として保存できます。この記事では、NumberInt()で設定されたフィールド値を持つ特定のドキュメントを取得するクエリの書き方を、実例とともに解説します。
コレクションの作成とドキュメントの挿入
まず、サンプルデータを格納するコレクションを作成し、ドキュメントを挿入します。以下の例では、「demo357」というコレクションに、ネストされた構造を持つ学生情報のドキュメントを2件登録しています。
> db.demo357.insertOne(
... {
... "FirstName" : "Chris",
... "Age" : 21,
... "details" : {
... "studentDetails" : {
... "id" : NumberInt(101)
... }
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e568fa6f8647eb59e5620c9")
}
> db.demo357.insertOne(
... {
... "FirstName" : "David",
... "Age" : 23,
... "details" : {
... "studentDetails" : {
... "id" : NumberInt(110)
... }
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e568fbaf8647eb59e5620ca")
}
ここでのポイントは、ネストされたフィールド「details.studentDetails.id」の値をNumberInt()で指定している点です。これにより、学籍番号(id)が32ビット整数型として保存されます。
find()メソッドですべてのドキュメントを表示
挿入したすべてのドキュメントを確認するには、find()メソッドを使用します。
> db.demo357.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e568fa6f8647eb59e5620c9"), "FirstName" : "Chris", "Age" : 21, "details" : { "studentDetails" : { "id" : 101 } } }
{ "_id" : ObjectId("5e568fbaf8647eb59e5620ca"), "FirstName" : "David", "Age" : 23, "details" : { "studentDetails" : { "id" : 110 } } }
NumberInt()を使って特定のドキュメントを取得するクエリ
それでは本題の、NumberInt()で設定されたフィールド値を持つ特定のドキュメントを取得するクエリを見ていきましょう。ネストされたフィールドを検索する場合はドット記法(「details.studentDetails.id」)でパスを指定し、検索値も同じくNumberInt()でラップして渡すのが重要です。
> db.demo357.find({"details.studentDetails.id":NumberInt(110)});
このクエリを実行すると、条件に一致した1件のドキュメントのみが出力されます。
{ "_id" : ObjectId("5e568fbaf8647eb59e5620ca"), "FirstName" : "David", "Age" : 23, "details" : { "studentDetails" : { "id" : 110 } } }
まとめ
MongoDBで数値型を厳密に扱いたい場合は、ドキュメントの挿入時と検索時の両方でNumberInt()を使用することが大切です。特にネストされたドキュメント内のフィールドを対象に検索する際は、ドット記法でパスを正しく指定し、挿入時と同じデータ型で条件を渡すことで、意図した通りの正確な結果を得られます。
-
MongoDBの検索クエリに静的な値を持つフィールドを追加する方法
MongoDBでクエリ結果に静的な値(固定値)を持つフィールドを追加したい場合は、$literal演算子とアグリゲーションフレームワーク(aggregate)を組み合わせて使用します。まずは、サンプル用のコレクションを作成しましょう。> db.fieldWithStaticValue.insertOne({"Name":"Larry","Age":24}); { "acknowledged" : true, "insertedId" : ObjectId("5cd65
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド