Javascript 如何在Mongo DB中的$push部分的组内分组
假设我们有代码:Javascript 如何在Mongo DB中的$push部分的组内分组,javascript,node.js,mongodb,aggregation-framework,Javascript,Node.js,Mongodb,Aggregation Framework,假设我们有代码: EightWeekGamePlan.aggregate( [ { $sort: { Week: 1 } }, { $group: { _id: { LeadId: "$LeadId", BusinessName: "$BusinessName", PhoneNumberMasque: "$PhoneNumbe
EightWeekGamePlan.aggregate(
[
{ $sort: { Week: 1 } },
{
$group: {
_id: {
LeadId: "$LeadId",
BusinessName: "$BusinessName",
PhoneNumberMasque: "$PhoneNumberMasque",
City: "$City",
Rooms: "$Rooms"
// dateToString: { format: "%Y-%m-%d", date: "$InserDate" }
},
Weeks: {
$push: {
Week: "$Week",
Status: "$Status",
InsertDate: "$InsertDate",
TargetClient: "$TargetedToBeClaimedByClientType",
MaxClaims: "$TotalClaimsToBeClaimedByClientType",
CurrentClaims: "$TotalClaimsLeftToBeClaimedByClientType"
}
}
}
}
]
我将一个$push分组到一个数组中,但是在将数据传回客户端之前需要另一个组:我们如何按周对数组进行分组
请不要在第一个$group
中使用另一组$Week
当前答案的示例(在第二组之前),我想按周再次分组:
LeadId: "6823f5c6-244e-41aa-89eb-5d4d87fac068"
PhoneNumberMasque: "076-5465743856475"
BusinessName: "Something ... "
City: "Somewhere ..."
Rooms: 2
Weeks: Array(10): Array(10)
0: {Week: 1, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 1, MaxClaims: 1, …}
1: {Week: 1, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 2, MaxClaims: 2, …}
2: {Week: 1, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 3, MaxClaims: 2, …}
3: {Week: 2, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 2, MaxClaims: 5, …}
4: {Week: 3, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 3, MaxClaims: 5, …}
5: {Week: 4, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 4, MaxClaims: 5, …}
6: {Week: 5, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 5, MaxClaims: 5, …}
7: {Week: 6, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 6, MaxClaims: 5, …}
8: {Week: 7, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 7, MaxClaims: 5, …}
9: {Week: 8, Status: 1, InsertDate: "2019-12-27T08:44:26.000Z", TargetClient: 8, MaxClaims: 5, …}
如果您不想使用附加的$group
阶段,您可以利用与的组合。为您提供一个唯一的周数
数组,然后使用$filter
可以将周数
数组中的匹配文档带到结果集中,并使用以下方法组合子文档:
虽然@mickl的添加阶段似乎可以完成这项工作,但我更愿意简单地将$week字段从acculator切换到$group阶段的_id字段
EightWeekGamePlan.aggregate(
[
{
$group: {
_id: {
LeadId: "$LeadId",
BusinessName: "$BusinessName",
PhoneNumberMasque: "$PhoneNumberMasque",
City: "$City",
Rooms: "$Rooms"
Weeks: "$Week",
},
Weeks: {
$push: {
Status: "$Status",
InsertDate: "$InsertDate",
TargetClient: "$TargetedToBeClaimedByClientType",
MaxClaims: "$TotalClaimsToBeClaimedByClientType",
CurrentClaims: "$TotalClaimsLeftToBeClaimedByClientType"
}
}
}
},
{ $sort: { "_id.Week": 1 } },
]
请注意,在这里,$sort阶段与第一阶段没有实际效果,但在分组后更有用。您可以粘贴一些文档和预期输出吗?@mickl:我添加了一个示例,谢谢!
EightWeekGamePlan.aggregate(
[
{
$group: {
_id: {
LeadId: "$LeadId",
BusinessName: "$BusinessName",
PhoneNumberMasque: "$PhoneNumberMasque",
City: "$City",
Rooms: "$Rooms"
Weeks: "$Week",
},
Weeks: {
$push: {
Status: "$Status",
InsertDate: "$InsertDate",
TargetClient: "$TargetedToBeClaimedByClientType",
MaxClaims: "$TotalClaimsToBeClaimedByClientType",
CurrentClaims: "$TotalClaimsLeftToBeClaimedByClientType"
}
}
}
},
{ $sort: { "_id.Week": 1 } },
]