我有一个这样的模型:
var field = {
createdAt: {type: Date, default: Date.now()},
updatedAt: {type: Date, default: Date.now()},
pic : {type: String, default: 'http://lorempixel.com/400/400/abstract/', writable: true},
thumb : {type: String, default: 'http://lorempixel.com/100/100/abstract/', writable: true},
name: {type: String},
description: {type: String},
isPublic: {type: Boolean, default: true},
members: [{type: Schema.Types.ObjectId, ref: 'Member'}],
}
我使用以下代码获取会员字段中Member
ID的总数。
Group.aggregate([
{$match: {_id:req.params.group_id}},
{$group: {
_id: '$members',
count: {$sum: 1}
}}
], function (err, count) {
res.send(count);
});
但它返回并清空数组[]
如何获得正确的计数?
感谢。
答案 0 :(得分:0)
Mongoose没有" autocast"到OjectId
或聚合管道中的任何其他模式类型。因此,您的操作不会返回任何内容
此外,这不是计算数组成员的方法。
最好使用$size
选项来计算每个文档的数组成员:
Group.aggregate([
{ "$match": { _id: ObjectId(req.params.group_id) }},
{ "$group": {
"_id": null,
"count": { "$sum": { "$size": "$members" } }
}}
], function (err, count) {
res.send(count);
});
$group
_id
用于相应的汇总,或null
用于此处集合中的所有项目。
如果你想要每个不同成员的数量"那么你将在文档中使用$unwind
来处理:
Group.aggregate([
{ "$match": { _id: ObjectId(req.params.group_id) }},
{ "$unwind": "$members" },
{ "$group": {
"_id": "$members",
"count": { "$sum": 1 }
}}
], function (err, count) {
res.send(count);
});