假设我们有以下数据
*父母*
{ _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/