MongoDBコレクションのすべての名前を取得します
元々は2019年1月18日にObjectRocket.com/blogで公開されました。
スキーマを検証したり、フィールドのタイプミスをデバッグしたり、設定すべきでないフィールドを見つけたりするには、MongoDB®コレクションのすべてのキーを理解する必要があります。
ObjectRocketを含む多くのMongoDB-as-a-Service企業は、ユーザーインターフェイス(UI)でこれを行う簡単な方法を提供しています。経験豊富なMongoDBusersは通常、MongooseforJavaScript®やMongoengineforPython®などのオブジェクトドキュメントマッパー(ODM)から開始するため、アプリケーションの一貫したスキーマを構築し、タイプミスを減らすことができます。 ODMは型の検証も行うため、整数があり、数学が適用されているフィールドに誤って文字列を入力することはありません。
サービスまたはODMがない場合は、他のいくつかの方法を使用してキーにアクセスできます。さまざまな状況でMongoDBcollectionのすべてのキーを取得するには、次の方法が見つかりました。
MongoDBキーを検索
次の例があるとします。
db.activities.insert( { type : [‘indoor’, 'outdoor' , ‘mixed’] } );
db.activities.insert( { activity : 'cycling' } );
db.activities.insert( { activity : ‘skiing’, location: ‘Alpes’, } );
db.activities.insert( { equipment : [‘paddles’,‘sunglasses’] } );
タイプ、アクティビティ、機器、場所などの一意のキーを取得する必要があります。
MapReduce
次の操作を使用して、MapReduceでキーを取得できます。
mr = db.runCommand({ "mapreduce" : "activities", "map" : function() { for (var key in this) { emit(key, null); } }, "reduce" : function(key, stuff) { return null; }, "out": "activities" + "_keys" })
操作が終了したら、次のdistinct
を実行します 結果のコレクションでコマンドを実行して、すべてのキーを検索します。
db.activities_keys.distinct("_id")
サブドキュメント内のすべての一意のキーのリストを取得する場合は、次の行を変更します。
for (var key in this.first_level.second_level.nth_level) { emit(key, null); }
集計も使用できます。このメソッドは、集約フレームワークをサポートするすべてのドライバーで機能します。集計では、$sample
を使用します または$limit
オーバーヘッドを削減します。
注: プライマリ読み取り設定で実行すると、パフォーマンスに影響を与える可能性があります。二次読み取り設定で実行することを検討してください。
$objectToArrray
で集計を使用する (バージョン3.4.4以降で使用可能)すべての上位のキーと値のペアをドキュメント配列に変換し、その後に$unwind
を続ける および$group
$addToSet
を使用 コレクション全体で個別のキーを取得します。
次の例では、$$ROOT
トップレベルのドキュメントを参照します。
db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$unwind":"$arrayofkeyvalue"}, {"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}} ])
次のコマンドを使用して、集計を使用して1つのドキュメントのキーを取得することもできます。
db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$project":{"keys":"$arrayofkeyvalue.k"}} ])
次のコマンドを使用して、Mongoシェルクライアントでキーを取得することもできます。
var allKeys = {}; db.YOURCOLLECTION.find().forEach(function(doc){Object.keys(doc).forEach(function(key){allKeys[key]=1})}); allKeys;
コレクション内の各ドキュメントは完全に異なるキーを持っている可能性があるため、コレクション内の単一のドキュメントのフィールドの出力が必要になる場合があります。これを行うには、次のコマンドを使用します:
doc=db.thinks.findOne(); for (key in doc) print(key);
Python
Pythonを使用してMongoDBキーを取得できます。次の例は、コレクション内のすべての最上位キーのセットを返します。
#Using pymongo and connection named 'db' reduce( lambda all_keys, rec_keys: all_keys | set(rec_keys), map(lambda d: d.keys(), db.things.find()), set() )
JavaScript
次の例に示すように、JavaScriptはキーを取得する別の方法を提供します。
db.collection('collectionName').mapReduce( function() { for (var key in this) { emit(key, null); } }, function(key, stuff) { return null; }, { "out": "allFieldNames" }, function(err, results) { var fields = db.collection('allFieldNames').distinct('_id'); fields .then(function(data) { var finalData = { "status": "success", "fields": data }; res.send(finalData); delteCollection(db, 'allFieldNames'); }) .catch(function(err) { res.send(err); delteCollection(db, 'allFieldNames'); }); });
新しく作成されたコレクションallFieldNames
を読んだ後 、削除してください。
db.collection("allFieldNames").remove({}, function (err,result) { db.close(); return; });
これらのMongoキーを取得するためのオプションはたくさんあります。 MongoDBの管理に圧倒され、データベース管理ではなくコードに集中したい場合は、私たちがここにいます。
RackspaceDBAサービスの詳細をご覧ください。
コメントや質問をするには、[フィードバック]タブを使用します。私たちと会話を始めることもできます。
-
C#のStringDictionaryでキーのコレクションを取得します
StringDictionaryでキーのコレクションを取得するには、コードは次のとおりです- 例 using System; using System.Collections; using System.Collections.Specialized; public class Demo { public static void Main(){ StringDictionary strDict1 = new StringDictionary(); strDict1.Add("
-
MongoDBコレクション内のすべてのキーの名前を取得する
スキーマを検証したり、フィールドのタイプミスをデバッグしたり、設定されていないフィールドを見つけたりするには、MongoDBコレクションのすべてのキーを理解する必要があります。 多くのMongoDB-as-a-service企業は、ObjectRocketを含め、UIでこれを行う簡単な方法を提供しています。経験豊富なMongoDBユーザーは通常、JS用のMongooseやPython用のMongoengineなどのオブジェクトドキュメントマッパー(ODM)から始めます。これにより、アプリケーションの一貫したスキーマを構築し、タイプミスを減らすことができます。 (ODMは型の検証も行うため、整