如何计算mongoose中一个不同字段的记录?

ask*_*ike 6 javascript mongoose nosql node.js

在探索nodejs的mongoose时,我遇到了需要知道我的集合中用户数量的问题:

我的收藏有记录,每个记录都有一个用户.我想知道独特(不同)用户的数量.

我怎么能用猫鼬做到这一点?

编辑:

数据库的增长速度非常快,无论如何都要从数据库中获取数字而不是获取所有不同的记录并计算它们?

Joh*_*yHK 14

这是另一个答案,因为我在使用Mongoose 3.1.2的Reddest方法时遇到异常(这对我来说似乎是Mongoose中的一个bug,因为Reddest的方法应该没问题).

您可以distinct在集合的模型上调用该方法,指定该集合的用户标识字段的名称:

Record.distinct('user_id').exec(function (err, user_ids) {
    console.log('The number of unique users is: %d', user_ids.length);
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您想distinct从查找中链接调用,请在调用中包含回调distinct(这对我有效):

Record.find().distinct('user_id', function (err, user_ids) { ... });
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果您只想获得计数而不获取值,count()请在链中粘贴一个调用:

Record.distinct('user_id').count().exec(function (err, count) {
    console.log('The number of unique users is: %d', count);
});
Run Code Online (Sandbox Code Playgroud)

注意:这在最新的Mongoose代码(3.5.2)中不起作用.


aar*_*ann 11

聚合对你有用.像这样的东西:

Transaction.aggregate(
    { $match: { seller: user, status: 'completed'  } }, 
    { $group: { _id: '$customer', count: {$sum: 1} } }
).exec() 
Run Code Online (Sandbox Code Playgroud)

  • 为什么 .distinct('phone').count() 在最新的猫鼬代码中不起作用? (3认同)