使用组猫鼬时如何总结字段?

时间:2018-04-02 04:50:40

标签: mongodb mongoose mongodb-query

后面有mongoDB文件。

{ "_id" : ObjectId("5ac06b6fb49124f4e5602817"), "status" : -1, "createdAt" : ISODate("2018-03-31T05:17:35.557Z") }

{ "_id" : ObjectId("5ac0b51cb08b6c0014d1d0c1"), "status" : 0, "createdAt" : ISODate("2018-04-01T10:31:56.199Z") }

{ "_id" : ObjectId("5ac0b538b08b6c0014d1d0c2"), "status" : 2, "createdAt" : ISODate("2018-04-01T10:32:24.542Z") }

我使用$ group,$ match,$ sum我只能返回: { _id: { month: 4, day: 1, year: 2018 }, count: 2 }

我想要回归: { _id: { month: 4, day: 1, year: 2018 }, count : 2, countStatus0 : 1, countStatus2 : 1 }

我希望你能帮助我...... 非常感谢。 对不起,我的英语不好。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下聚合:

 if (id == R.id.nav_camera) {

  //code to inflate another layout inplace of current layout
  //setContentView(R.layout.another_layout1);


    } else if (id == R.id.nav_gallery) {

  //code to inflate another layout inplace of current layout
  //setContentView(R.layout.another_layout2);

    } 

要获得每个状态的总和和总和,您必须使用db.col.aggregate([ { $group: { _id: { year: { $year: "$createdAt" }, month: { $month: "$createdAt" }, day: { $dayOfMonth: "$createdAt" }, status: "$status" }, count: { $sum: 1 } } }, { $group: { _id: { year: "$_id.year", month: "$_id.month", day: "$_id.day" }, count: { $sum: "$count" }, statuses: { $push: { k: { $concat: ["status", {$substr:["$_id.status", 0, -1 ]}] }, v: "$count" } } } }, { $project: { _id: 1, count: 1, statuses: { $arrayToObject: "$statuses" } } }, { $replaceRoot: { newRoot: { $mergeObjects: [ "$$ROOT", "$statuses" ] } } }, { $project: { statuses: 0 } } ]) 两次。每个部分状态都可以转换为一对$groupk,其中v是动态生成的字符串,是key的串联,其值类似status },status0。拥有这些对后,您可以使用$arrayToObject从该数组生成对象字段。然后,您可以使用$mergeObjects$replaceRoot将根与嵌套的status2对象合并。

这里有一个技巧。由于MongoDB不允许将字符串与double连接,我们必须在double上使用statuses将其转换为字符串。