はい、集計演算子$objectToArray
を利用できるようになりました ( SERVER-23310
)キーを値に変換します。 '動的な'フィールド数を数えることができるはずです。この演算子を
両方の演算子は、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}}}
])
上記のように、ユースケースで可能であれば、データモデルを再検討することをお勧めします。 簡単にアクセスできます。つまり、新しいスポーツポジションが挿入/追加されたときに、スポーツの数を追跡するための新しいフィールドを追加します。