sql >> データベース >  >> NoSQL >> MongoDB

Pymongo集計:フィールド数でフィルタリング(動的)

    はい、集計演算子$objectToArrayを利用できるようになりました ( SERVER-23310 )キーを値に変換します。 '動的な'フィールド数を数えることができるはずです。この演算子を $addFields と組み合わせる 非常に便利かもしれません。

    両方の演算子は、MongoDB v3.4.4 +で使用できます。例として上記のドキュメントを使用します:

    db.sports.aggregate([
              { $addFields : 
                 { "numFields" : 
                   { $size:
                     { $objectToArray:"$$ROOT"}
                   }
                 }
              }, 
              { $match: 
                { numFields: 
                  {$gt:2}
                }
              }
    ])
    

    上記の集計パイプラインは、最初にnumFieldsというフィールドを追加します 。値は配列のサイズになります。配列には、ドキュメント内のフィールドの数が含まれます。第2段階では、2つ以上のフィールド(_idがまだあるため、2つのフィールド)のみをフィルタリングします。 フィールドとname )。

    PyMongo で 、上記の集計パイプラインは次のようになります。

    cursor = collection.aggregate([
                             {"$addFields":{"numFields":
                                             {"$size":{"$objectToArray":"$$ROOT"}}}}, 
                             {"$match":{"numFields":{"$gt":2}}}
             ])
    

    上記のように、ユースケースで可能であれば、データモデルを再検討することをお勧めします。 簡単にアクセスできます。つまり、新しいスポーツポジションが挿入/追加されたときに、スポーツの数を追跡するための新しいフィールドを追加します。




    1. 大文字と小文字を区別しない方法でMongodbを並べ替える

    2. mongodbの日付文字列を比較することは可能ですか?

    3. node.js用のブロッキングredisライブラリはありますか?

    4. $lookup結果の$match