MongoDB:ドキュメント内のキーの数を数える方法は?
Mongodb How Count Number Keys Document
解決:
集約フレームワークを介してMongoDB3.6以降を使用する場合は、かなり可能です。使用 $ objectToArray
ドキュメントを配列に変換するための集計パイプライン内の演算子。戻り配列には、元のドキュメントの各フィールド/値のペアの要素が含まれています。戻り配列の各要素は、2つのフィールドを含むドキュメントです。kと
v。
ドキュメントをルート化するための参照は、 $$ ROOT
集約パイプラインステージで現在処理されている最上位のドキュメントを参照するシステム変数。
アレイを取得すると、次の使用を活用できます。 $ addFields
カウントを保持するフィールドを作成するパイプラインステップと実際のカウントは、 $ size
オペレーター。
これはすべて、次のように式をネストすることにより、単一のパイプラインで実行できます。
db.collection.aggregate([{'$ addFields':{'count':{'$ size':{'$ objectToArray': '$$ ROOT'}}}}}]) 出力例
{'_id':ObjectId( '5a7cd94520a31e44e0e7e282')、 'a':1.0、 'b':1.0、 'c':2.0、 'z':2.0、 'count':5}
を除外するには_idフィールド、使用できます $ filter
演算子として:
db.collection.aggregate([{'$ addFields':{'count':{'$ size':{'$ filter':{'input':{'$ objectToArray': '$$ ROOT'}、 'as ':' el '、' cond ':{' $ ne ':[' $$ el.k '、' _id ']}}}}}}}}])または0zkrPMによって提案されているように、単に追加します $ project
最初のパイプラインステップ:
db.collection.aggregate([{'$ project':{'_ id':0}}、{'$ addFields':{'count':{'$ size':{'$ objectToArray': '$$ ROOT' }}}}])
そのための組み込みコマンドはありません。このドキュメントを取得して、自分でキーを数えます。
Mongoでは(ほとんどのNoSQLソリューションと同様に)、後でクエリを実行する場合(たとえば、「異なるキーの数> 12」)、そのような値を事前に計算することをお勧めします。したがって、新しい値を追加することを検討する必要があります。新しいキーが追加されるたびにインクリメントするフィールド「keyCount」。