特定のフィールドのコレクション内のドキュメントをグループ化し、各グループの出力結果については、次を含めることを検討しています。
- (いくつかの表現{「$プロパティ」:「価値」}満たす文書のつまりcount)特定のクエリに一致するグループ内のすべての文書の数
- グループ内のドキュメントの合計数
- (これは簡単には実現しないと思われるので、ボーナス)$ min/$ maxアキュムレータに対応する文書のプロパティ
私はmongoでのクエリに使用されている構文に非常に新しいので、すべての仕組みを理解していませんが、いくつかの調査の後で、次のクエリを取得できました。私は現在、私のmongo DBのバージョン3.0.12を使用していますが、私たちは数ヶ月時間)にアップグレードします信じている:
db.getCollection('myCollection').aggregate(
[
{
$group: {
_id: {
GroupID: "$GroupID",
Status: "$Status"
},
total: { $sum: 1 },
GroupName: { $first: "$GroupName" },
EarliestCreatedDate: { $min: "$DateCreated" },
LastModifiedDate: { $max: "$LastModifiedDate" }
}
},
{
$group: {
_id: "$_id.GroupID",
Statuses: {
$push: {
Status: "$_id.Status",
Count: "$total"
}
},
TotalCount: { $sum: "$total" },
GroupName: { $first: "$GroupName" },
EarliestCreatedDate: { $min: "$EarliestCreatedDate" },
LastModifiedDate: { $max: "$LastModifiedDate" }
}
}
]
)
基本的に私は何を取得するために探していますが、特定のステータス値のカウントであり、それらを次のような最終結果ドキュメントに投影します。
{
GroupName,
EarliestCreatedDate,
EarliestCreatedBy,
LastModifiedDate,
LastModifiedBy,
TotalCount,
PendingCount,
ClosedCount
}
ここで、PendingCountおよびClosedCountは、ステータスがPending/Closedの各グループ内の文書の合計数です。私はこの値を抽出するために他の式を使って$ projectを使う必要があると思うが、これを把握するのに十分な集約パイプラインは本当に理解できない。
また、EarliestCreatedByおよびLastModifiedByは、それぞれEarliestCreatedDateおよびLastModifiedDateに対応するドキュメントを作成または変更したユーザーです。私が言及したように、私はこれらの値を取得することは別の複雑さの層を追加すると思います。実用的な解決策がなければ、私はこの要件を忘れてしまいます。
どのような提案やヒントも非常に高く評価されます。
を算出する
同様の手順 '$$'構文オブジェクトに変更するに
$project
段階の後$unwind
ステージを追加します。 Ex'CrBy'および 'EaCrBy'。もう少し詳しくはこちらhttps://docs.mongodb.com/v3.2/reference/aggregation-variables/ – Veeramありがとうございました。私はそれを読んで、それは私のニーズに合っていると思うが、それは私のために働いていないようだ。私は$ arrayElemAt式が私のmongo dbのバージョン3.0.12でサポートされていないと信じています。このバージョンでも同様の操作を実行する方法を知っていますか?そうでなければ、私は今のところできます。私は数ヶ月でDBを最新バージョンにアップグレードしようと考えています。 –
心配はいりません。どういたしまして。あなたのバージョンのアップデートが含まれています。 – Veeram