【发布时间】:2017-02-06 18:31:29
【问题描述】:
因此,我希望将集合中的文档按特定字段分组,对于每个组的输出结果,我希望包括以下内容:
- 组中与特定查询匹配的所有文档计数(即满足某个表达式 { "$Property": "Value" } 的文档计数)
- 组中的文档总数
- (奖励,因为我怀疑这不容易实现)对应于 $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 对应的文档的用户。正如我所提到的,我认为检索这些值会增加另一层复杂性,所以如果没有切实可行的解决方案,我愿意放弃这个要求。
非常感谢任何建议/提示。
【问题讨论】:
标签: mongodb mongodb-query