MongoDB—aub数组和子文档的两个级别上的聚合组和
这是我的问题。我在网站上查看了很多其他MongoDB问题,但没有一个与我下面的情况相符 我有一个MongoDB嵌入式文档结构,如下所示:-MongoDB—aub数组和子文档的两个级别上的聚合组和,mongodb,aggregation-framework,Mongodb,Aggregation Framework,这是我的问题。我在网站上查看了很多其他MongoDB问题,但没有一个与我下面的情况相符 我有一个MongoDB嵌入式文档结构,如下所示:- { company : "ABC", year : 2010, Project : [{ Domain : "Telecom", Client: [{"Name": "Ponderfone","size":25},{"Name": "Skytel","size":35},{"Name":
{
company : "ABC",
year : 2010,
Project : [{
Domain : "Telecom",
Client: [{"Name": "Ponderfone","size":25},{"Name": "Skytel","size":35},{"Name": "ChinaTel","size":10}]
}, {
Domain : "Retail",
Client: [{"Name": "Gatemart","size":95},{"Name": "Clearway","size":40}]
}, {
Domain : "Finance",
Client: [{"Name": "MFCI","size":20},{"Name": "FCCI","size":20},{"Name": "MobiBank","size":35}]
}
]
}
{
company : "ABC",
year : 2011,
Project : [{
Domain : "Telecom",
Client: [{"Name": "Ponderfone","size":50},{"Name": "Skytel","size":30},{"Name": "ChinaWay","size":30}]
}, {
Domain : "Retail",
Client: [{"Name": "Gatemart","size":120},{"Name": "Shadowfax","size":15}]
}, {
Domain : "Finance",
Client: [{"Name": "Reuben Analysts","size":15},{"Name": "FCCI","size":10},{"Name": "MobiBank","size":35}]
}
]
}
这里的问题是,我试图在最内层的文档中聚合一列,该文档中嵌入了两个级别:-
“项目.客户端.大小”
我试图对特定域的这一列求和(如果您看到JSON)
此代码的问题在于,它返回的结果中,员工人数标记为0
{ "_id" : { "company" : "ABC", "year" : 2010, "domain" : "Retail" }, "headcount"
: 0 }
{ "_id" : { "company" : "ABC", "year" : 2010, "domain" : "Telecom" }, "headcount
" : 0 }
2010年电信和ABC公司的员工人数应为(25+35+10)70人
2010年零售业和ABC公司的员工人数应为(95+40)135人
这里有我遗漏的东西吗 在管道中最后一个过滤器之后,您缺少一个管道步骤。这是对
客户端
数组进行非规范化所必需的,这样您就可以在下一个管道中访问其属性进行聚合。因此,最终管道应遵循以下模式:
完美的非常感谢。。我会花上无数的时间来解决这个问题!!
{ "_id" : { "company" : "ABC", "year" : 2010, "domain" : "Retail" }, "headcount"
: 0 }
{ "_id" : { "company" : "ABC", "year" : 2010, "domain" : "Telecom" }, "headcount
" : 0 }
db.projects.aggregate([
{ "$match": {"year": 2010, "company": "ABC"} },
{ "$unwind": "$Project" },
{ "$match": { "$or": [{"Project.Domain": /Telecom/},{"Project.Domain": /Retail/}] } },
{ "$unwind": "$Project.Client" },
{
"$group": {
"_id": {
"company": "$company",
"year": "$year",
"domain": "$Project.Domain"
},
"headcount": { "$sum": "$Project.Client.size" }
}
}
])