MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBコレクション内のすべてのフィールド名を取得する方法

MapReduceを使ってフィールド名を取得する

MongoDBのコレクションに含まれるすべてのフィールド名を一覧として取得したい場合は、MapReduceの仕組みを利用するのが便利です。ここでは、実際にサンプルコレクションを作成しながら、フィールド名を抽出する手順を順番に解説していきます。

1. サンプルコレクションの作成

まず、insertOne()メソッドを使ってドキュメントを1件登録し、テスト用のコレクションを作成します。

> db.getAllFieldNamesDemo.insertOne({"StudentFirstName":"David","StudentAge":23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd998e9b50a6c6dd317ad90")
}

2. 登録内容の確認

find()メソッドを実行して、コレクション内のすべてのドキュメントを表示してみましょう。

> db.getAllFieldNamesDemo.find();

実行すると、次のような結果が得られます。

{ "_id" : ObjectId("5cd998e9b50a6c6dd317ad90"), "StudentFirstName" : "David", "StudentAge" : 23 }

3. すべてのフィールド名を抽出するクエリ

続いて、MapReduceを使ってコレクション内の全フィールド名を取得します。map関数で各ドキュメントのキー(フィールド名)をemitし、reduce関数で重複をまとめるのがポイントです。

> myMapReduce = db.runCommand({
   "mapreduce" : "getAllFieldNamesDemo",
   "map" : function() {
      for (var myKey in this) { emit(myKey, null); }
   },
   "reduce" : function(myKey, s) { return null; },
   "out": "getAllFieldNamesDemo" + "_k"
})
{
   "result" : "getAllFieldNamesDemo_k",
   "timeMillis" : 1375,
   "counts" : {
      "input" : 1,
      "emit" : 3,
      "reduce" : 0,
      "output" : 3
   },
   "ok" : 1
}
> db[myMapReduce.result].distinct("_id");

4. 実行結果

上記のクエリを実行すると、コレクション内のフィールド名が配列形式で出力されます。

[ "StudentAge", "StudentFirstName", "_id" ]

このように、「StudentAge」「StudentFirstName」、そして自動的に付与される「_id」の3つのフィールド名が正しく取得できました。

補足:集計フレームワークを使った代替方法

なお、MapReduceはMongoDB 4.2以降では非推奨とされているため、新しいバージョンを使用している場合は、集計フレームワーク(Aggregation Framework)の$objectToArray演算子を活用する方法もおすすめです。

> db.getAllFieldNamesDemo.aggregate([
   { $project: { fields: { $objectToArray: "$$ROOT" } } },
   { $unwind: "$fields" },
   { $group: { _id: null, allFields: { $addToSet: "$fields.k" } } }
])

使用しているMongoDBのバージョンや用途に応じて、最適な方法を選択してください。

  1. MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ

    この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを

  2. MongoDBコレクション内の全キー名を取得する方法|MapReduce・Aggregation・シェルなど状況別に解説

    スキーマの検証、フィールド名のタイプミスのデバッグ、設定されるべきではないフィールドの発見などを行うには、まずMongoDBコレクション内にどのようなキーが存在するのかを把握しておく必要があります。多くのMongoDB-as-a-Service事業者は、UI上で手軽にこれを実現できる機能を提供しています(ObjectRocketもそのひとつです)。また、経験豊富なMongoDBユーザーの多くは、JavaScript向けのMongooseやPython向けのMongoengineといったオブジェクトドキュメントマッパー(ODM)を導入しています。ODMを使えば、アプリケーション向けの一貫性のある