假设我们有以下数据

*父母*

{ _id: 10, child: ObjectID(20) }
{ _id: 11, child: ObjectID(21) }
{ _id: 12, child: ObjectID(23) }


*儿童*

{ _id: 20, name: 'test-1' }
{ _id: 21, name: 'test-2' }
{ _id: 22, name: 'test-3' }
{ _id: 23, name: 'test-1' }


我想知道用什么猫鼬来获得以下结果。

{ _id: 'test-1', count: 2}
{ _id: 'test-2', count: 1}


我当前正在使用以下查询,但结果中的_id始终为{ _id: null, count: 3 }
:(

Parent.aggregate([{
  $group: {
     _id: '$child.name',
     count: { $sum: 1 }
  }
}])


任何形式的帮助表示赞赏。

最佳答案

这是创建一个单一集合的更好方法,以避免对两个不同集合的两个查询。

首先,您应该从父集合中找出所有不同的子ID,并将其分配给变量,如下所示:

var allChildIds = db.parent.distinct("child")


之后,在children集合中使用了该子ID,如下所示:

db.children.aggregate({"$match":{"_id":{"$in":allChildIds}}},{"$group":{"_id":"$name","sum":{"$sum":1}}})

关于node.js - 如何按 Mongoose 的子文档字段对记录进行分组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40728227/

10-09 22:09