データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

MongoDBコレクション内のすべてのキーの名前を取得する

MongoDBコレクション内のすべてのキーの名前を取得する

スキーマを検証したり、フィールドのタイプミスをデバッグしたり、設定されていないフィールドを見つけたりするには、MongoDBコレクションのすべてのキーを理解する必要があります。

多くのMongoDB-as-a-service企業は、ObjectRocketを含め、UIでこれを行う簡単な方法を提供しています。経験豊富なMongoDBユーザーは通常、JS用のMongooseやPython用のMongoengineなどのオブジェクトドキュメントマッパー(ODM)から始めます。これにより、アプリケーションの一貫したスキーマを構築し、タイプミスを減らすことができます。 (ODMは型の検証も行うため、整数があり、数学が適用されているフィールドに誤って文字列を入力することはありません。)

サービスまたはODMがない場合は、キーにアクセスするために使用できる他のいくつかの方法があります。さまざまな状況で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" })

それが完了したら、結果のコレクションに対して個別のコマンドを実行して、すべてのキーを見つけます。

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"}}} ])

単一のドキュメントでキーを取得

集計を使用して、単一のドキュメントでキーを取得することもできます:

db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$project":{"keys":"$arrayofkeyvalue.k"}} ])

Mongoシェル

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を使用できます。これにより、コレクション内のすべての最上位キーのセットが返されます。

#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の管理に圧倒され、データベース管理ではなくコードに集中したい場合は、私たちがお手伝いします。データベースプラットフォームと白い手袋のサポートを無料でお試しください。


  1. Python辞書からすべてのキーのリストを取得するにはどうすればよいですか?

    辞書からすべてのキーのリストを取得するには、dict.keys()関数を使用するだけです。 例 my_dict = {'name': 'TutorialsPoint', 'time': '15 years', 'location': 'India'} key_list = list(my_dict.keys()) print(key_list) 出力 これにより、出力が得られます- ['name', 'time', 'location'] リスト内

  2. MongoDBコレクションのすべての名前を取得します

    元々は2019年1月18日にObjectRocket.com/blogで公開されました。 スキーマを検証したり、フィールドのタイプミスをデバッグしたり、設定すべきでないフィールドを見つけたりするには、MongoDB®コレクションのすべてのキーを理解する必要があります。 ObjectRocketを含む多くのMongoDB-as-a-Service企業は、ユーザーインターフェイス(UI)でこれを行う簡単な方法を提供しています。経験豊富なMongoDBusersは通常、MongooseforJavaScript®やMongoengineforPython®などのオブジェクトドキュメントマッパ