MongoDBでドキュメント検索時にObjectIdを返さないようにする方法
MongoDBでドキュメントを検索すると、デフォルトでは必ず _id フィールド(ObjectId)が結果に含まれます。このObjectIdを結果から除外したい場合は、検索時にプロジェクション(射影)で _id の値を 0 に設定します。
本記事では、実際にサンプルコレクションを作成し、ObjectIdを非表示にしてドキュメントを取得する手順を順番に解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使ってサンプル用のドキュメントを挿入します。
> db.preventObjectIdDemo.insertOne(
... {
... "StudentName" : "Chris",
... "StudentDetails" : [
... {
... "StudentTotalScore" : 540,
... "StudentCountryName" : "US"
... },
... {
... "StudentTotalScore" : 489,
... "StudentCountryName" : "UK"
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca20a9c66324ffac2a7dc63")
}
find()メソッドですべてのドキュメントを表示する
続いて、find()メソッドを使ってコレクション内のすべてのドキュメントを表示してみましょう。
> db.preventObjectIdDemo.find().pretty();
実行結果は次のとおりです。ご覧のとおり、ドキュメントの先頭に _id としてObjectIdが自動的に表示されています。
{
"_id" : ObjectId("5ca20a9c66324ffac2a7dc63"),
"StudentName" : "Chris",
"StudentDetails" : [
{
"StudentTotalScore" : 540,
"StudentCountryName" : "US"
},
{
"StudentTotalScore" : 489,
"StudentCountryName" : "UK"
}
]
}ObjectIdを非表示にしてドキュメントを取得する
検索結果からObjectIdを除外するには、find()メソッドの第2引数であるプロジェクションに '_id': 0 を指定します。あわせて $slice 演算子を使用すると、配列フィールドの一部だけを取得することも可能です。
> db.preventObjectIdDemo.find({ _id: ObjectId("5ca20a9c66324ffac2a7dc63")}, {StudentDetails: { $slice: [0, 1] } ,' _id': 0} ).pretty();以下が出力結果です。ObjectIdが表示されていないことが確認できます。
{
"StudentName" : "Chris",
"StudentDetails" : [
{
"StudentTotalScore" : 540,
"StudentCountryName" : "US"
}
]
}ポイントのまとめ
_id: 0を明示的に指定しない限り、検索結果には常にObjectIdが含まれます。- MongoDBのプロジェクションでは、
_id以外のフィールドは包含と除外を混在できません。そのため、特定のフィールドを指定して取得する場合でも、_idだけは例外的に0を指定して除外できます。 $slice演算子を使えば、配列フィールドから必要な要素だけを取り出すことができます(上記の例では先頭から1件のみ取得)。
-
MongoDBの埋め込みドキュメントから特定の要素を抽出する方法($unwind・$match・$projectの活用)
MongoDBでは、配列形式の埋め込みドキュメントから特定の条件に合う要素だけを取り出したい場面がよくあります。そのような場合は、集計(Aggregation)パイプラインで $unwind、$match、$project を組み合わせることで、目的のデータを効率的に抽出できます。コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使って、学生情報を配列として持つコレクションを作成します。> db.demo744.insertOne( ... { ... studentInformation: ... [ ...
-
JavaでMongoDBコレクションからデータを取得する際にレコード数を制限する方法
MongoDBのコレクションからレコードを取得する際、limit()メソッドを使用することで、結果として返されるレコードの件数を制限できます。大量のデータが格納されたコレクションから必要な分だけ効率よく取り出したい場合に非常に便利な機能です。 limit()メソッドの基本構文 db.COLLECTION_NAME.find().limit(取得したいレコード数) シェル上では上記のように記述します。JavaのMongoDBドライバ(ライブラリ)にも同名のlimit()メソッドが用意されており、find()メソッドの実行結果に対して、必要なレコード数を表す整数値を引数として渡して呼び出すことで、