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

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

元々は2019年1月18日にObjectRocket.com/blogで公開されました。

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

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サービスの詳細をご覧ください。

コメントや質問をするには、[フィードバック]タブを使用します。私たちと会話を始めることもできます。


  1. 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("

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

    スキーマを検証したり、フィールドのタイプミスをデバッグしたり、設定されていないフィールドを見つけたりするには、MongoDBコレクションのすべてのキーを理解する必要があります。 多くのMongoDB-as-a-service企業は、ObjectRocketを含め、UIでこれを行う簡単な方法を提供しています。経験豊富なMongoDBユーザーは通常、JS用のMongooseやPython用のMongoengineなどのオブジェクトドキュメントマッパー(ODM)から始めます。これにより、アプリケーションの一貫したスキーマを構築し、タイプミスを減らすことができます。 (ODMは型の検証も行うため、整