Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Mongo DB中的$push部分的组内分组_Javascript_Node.js_Mongodb_Aggregation Framework - Fatal编程技术网

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 } },
      ]