【发布时间】:2016-08-03 21:19:13
【问题描述】:
这是我的数据库。
{
"_id" : ObjectId("579cab6c6aba30f42a57a979"),
"iecode" : "P1111",
"country" : "India",
"totalTreatmentArms" : 3,
"treatmentArms" : [
{
"mechanismOrPkg" : "Mechanism",
"mechanism" : "mechanism1"
},
{
"mechanismOrPkg" : "Mechanism",
"mechanism" : "mechanism2"
},
{
"mechanismOrPkg" : "Package",
"mechanism" : "mechanism1"
}
]
}
{
"_id" : ObjectId("579cab7a6aba30f42a57a97a"),
"iecode" : "P1111",
"country" : "Canada",
"totalTreatmentArms" : 3,
"treatmentArms" : [
{
"mechanismOrPkg" : "Mechanism",
"mechanism" : "mechanism1"
},
{
"mechanismOrPkg" : "Mechanism",
"mechanism" : "mechanism2"
},
{
"mechanismOrPkg" : "Package",
"mechanism" : ""
}
]
}
{
"_id" : ObjectId("579cabac6aba30f42a57a97b"),
"iecode" : "P2222",
"country" : "India",
"totalTreatmentArms" : 1,
"treatmentArms" : [
{
"mechanismOrPkg" : "Package",
"mechanism" : ""
}
]
}
{
"_id" : ObjectId("579cabe76aba30f42a57a97c"),
"iecode" : "P3333",
"country" : "India",
"totalTreatmentArms" : 2,
"treatmentArms" : [
{
"mechanismOrPkg" : "Mechanism",
"mechanism" : "mechanism1"
},
{
"mechanismOrPkg" : "Package",
"mechanism" : ""
}
]
}
请注意,iecode : P1111 有两条记录,我希望在iecode 上区分结果,因此只考虑一条记录(任何一条)。
现在我的要求是我想依靠字段mechanismOrPkg。如果它包含值Package,那么我们将package 加一。如果值为Mechanism,那么我们将考虑字段mechanism 的值,并考虑其受尊重的值计数。
所以最终的结果会是这样的
{
"_id" : null,
"totalPackage" : 3,
"totalMechanism1" : 2,
"totalMechanism2" : 1
}
请问这听起来是否令人困惑。让我知道,即使这种聚合可以通过查询实现,或者我必须进行服务器端过滤?
谢谢。
编辑
mechanismOrPkg 的可能值:包或机制
机制的可能值:机制1或机制2
【问题讨论】:
-
您还应该指定
mechanismOrPkg为Mechanism的所有文档mechanism值是否只能有2 个值(mechanism1、mechanism2),如您的示例或可能的机制数量不受您的应用程序限制,它可能是mechanism3,mechanism4,...因此结果文档的长度将取决于特定的集合状态 -
@tarashypka 感谢您的关注。检查我的编辑。
标签: mongodb mongodb-query aggregation-framework