MongoDB の collection 内の すべての key を取得する

RDBM関連データベースの table に相当する collection に key : value のペアーが保管されている、key は field に似ていますが、一つ一つのオブジェクトに入っている key は可変です。だから、RDBMの field の一覧を出すのは簡単ですが、MongoDB は collection 内のオブジェクトを巡って取ってくる必要がある。

mr = db.runCommand({
  "mapreduce" : "my_collection",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; }, 
  "out": "my_collection" + "_keys"
})
db[mr.result].distinct("_id")
my_collection は key を取得したい collection名に変更してください。
mr = db.runCommand({
  "mapreduce" : "EFn",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; }, 
  "out": "my_collection" + "_keys"
})
{
"result" : "my_collection_keys",
"timeMillis" : 290837,
"counts" : {
"input" : 3883160,
"emit" : 117368229,
"reduce" : 1281456,
"output" : 33
},
"ok" : 1
}
実際にDPCのEFファイル、388万件ほどで実行してみた。
結果は下記の通りです。
 db[mr.result].distinct("_id")
[
"EF-0",
"EF-1",
"EF-10",
"EF-11",
"EF-12",
"EF-13",
"EF-14",
"EF-15",
"EF-16",
"EF-17",
"EF-18",
"EF-19",
"EF-2",
"EF-20",
"EF-21",
"EF-22",
"EF-23",
"EF-24",
"EF-25",
"EF-26",
"EF-27",
"EF-28",
"EF-29",
"EF-3",
"EF-30",
"EF-31",
"EF-4",
"EF-5",
"EF-6",
"EF-7",
"EF-8",
"EF-9",
"_id"
]

コメント

このブログの人気の投稿

MongoDB 検索結果をファイルに出力

Mongodb で大量データ(390万件弱)をインポートしてみた

Spotfire からMongoDBのデータを分析する(DPC公開データをサンプルに)