MongoDBで「_id」以外のすべてのフィールド値を表示するクエリ方法
MongoDBでは、ドキュメントを取得すると自動的に _id フィールドが含まれますが、場合によってはこのフィールドを除外し、他のフィールド値だけを表示したいことがあります。本記事では、コレクションの作成から、_id を除いたすべてのフィールド値を表示するまでの一連の手順を解説します。
1. ドキュメントを含むコレクションを作成する
まずは、サンプルとなるコレクションを作成しましょう。以下のコマンドを実行して、複数のドキュメントを一括挿入します。
> db.demo590.insert([
... { "Name": "Chris", "Age": 21 },
... {"Name": "Bob", "Age": 20},
... { "Name": "Sam", "Age": 19 }
... ]);
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
3件のドキュメントが正常に挿入されました(nInserted: 3)。
2. find()メソッドですべてのドキュメントを表示する
続いて、find() メソッドを使ってコレクション内のすべてのドキュメントを確認します。
> db.demo590.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e92d514fd2d90c177b5bcd0"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e92d514fd2d90c177b5bcd1"), "Name" : "Bob", "Age" : 20 }
{ "_id" : ObjectId("5e92d514fd2d90c177b5bcd2"), "Name" : "Sam", "Age" : 19 }ご覧のとおり、デフォルトでは各ドキュメントに _id フィールドが含まれています。
3. 「_id」を除いてすべてのフィールド値を表示する
ここからが本題です。forEach() を使って各ドキュメントを順番に処理し、必要なフィールドだけを格納した新しいオブジェクトを作成することで、_id を除外した結果を取得できます。
> var listOfObject = [];
> db.demo590.find().forEach(function(d){
... var ob = {};
... ob["StudentFirstName"] = d.Name;
... ob["StudentAge"] = d.Age;
... listOfObject.push(ob);
... });
このスクリプトでは、各ドキュメントから「Name」と「Age」の値を取り出し、それぞれ「StudentFirstName」「StudentAge」というキーを持つ新しいオブジェクトに格納しています。こうすることで、元の _id は一切コピーされません。
4. 結果の確認
作成したオブジェクトリストを表示します。
> listOfObject;
実行すると、次のような出力が得られます。
[
{
"StudentFirstName" : "Chris",
"StudentAge" : 21
},
{
"StudentFirstName" : "Bob",
"StudentAge" : 20
},
{
"StudentFirstName" : "Sam",
"StudentAge" : 19
}
]
このように、forEach() と新しいオブジェクトへの再構築を組み合わせることで、_id フィールドを除外したデータを簡単に取得できます。
補足:プロジェクションを使うシンプルな方法
なお、フィールド名を変更せず、単純に既存のまま _id だけを除外したい場合は、プロジェクションを利用した次のようなクエリが便利です。
> db.demo590.find({}, { "_id": 0 });用途に応じて、両者の方法を使い分けるとよいでしょう。
-
MongoDBで_idを使ってグループ化するクエリの書き方
MongoDBでドキュメントをグループ化するには、集計パイプライン(aggregation pipeline)の $group ステージを使用します。この記事では、実際にコレクションを作成し、$group を使ってデータを集計する手順を具体的な例とともに解説します。 サンプルコレクションの作成 まずは、動作確認用のコレクションにドキュメントを挿入してみましょう。以下のように insertOne() メソッドを使って、スコア情報を持つドキュメントを複数件登録します。 > db.demo529.insertOne({Score:10}); { acknowledged : true
-
【MySQL】大文字を含むすべてのレコードを抽出するクエリの書き方
MySQLで、特定のカラムに大文字が含まれるすべてのレコードを表示したい場合には、文字列式と正規表現パターンの一致を判定するRLIKE演算子を使用します。この記事では、実際にテーブルを作成し、データを挿入して、大文字を含むレコードだけを抽出する手順をわかりやすく解説します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table contains_capital_letterDemo -> ( -> Id int NOT NUL