9

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

我的收藏有记录,每条记录都有一个用户。我想知道唯一(不同)用户的数量。

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

编辑:

数据库增长得很快,有没有办法从数据库中取回数字而不是获取所有不同的记录并计算它们?

4

6 回答 6

16

这是一个替代答案,因为当我尝试使用 Mongoose 3.1.2 的 Reddest 方法时出现异常(这对我来说似乎是 Mongoose 中的一个错误,因为 Reddest 的方法应该没问题)。

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

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

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

Record.find().distinct('user_id', function (err, user_ids) { ... });

更新

如果您只想要计数而不获取值,count()请在链中调用:

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

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

于 2012-09-17T01:36:43.950 回答
13

聚合将为您工作。像这样的东西:

Transaction.aggregate(
    { $match: { seller: user, status: 'completed'  } }, 
    { $group: { _id: '$customer', count: {$sum: 1} } }
).exec() 
于 2012-12-20T20:45:54.143 回答
3

如果您只想获取查询集合的数量,可以使用:

Record.find()
      .distinct('user_id')
      .count(function (err, count) {
          //The number of unique users is 'count'
      });
于 2014-03-27T03:23:13.250 回答
1

您可以执行不同的查询。

var Record = db.model('Record', yourSchema);
Record.find().distinct('user').exec(callback);

猫鼬查询: http: //mongoosejs.com/docs/queries.html

MongoDB 不同查询: http ://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct

于 2012-09-17T00:14:39.287 回答
1

我只需要不同音乐家的数量,但上面的一些代码对我不起作用。如果我同时使用 count 和 distinct ,我就得到了总数。

这是我的解决方案

/**
 * Get number of distinct musicians
 */

myList.find()
    .distinct('musicianName')
    .exec(function (err, count) {
        console.log(count.length);
    });
于 2018-05-17T12:10:45.873 回答
0

我正在寻找答案并得到了这个问题,现在我得到了答案,所以回答了这个问题。

您可以使用以下代码隔离所有具有相似属性的用户。我以电子邮件为例,您可以更改它。您还将获得与您选择的属性值相同的所有用户的计数。

var agg = [{$group: {_id: "$email",total: {$sum: 1}}}];
User.aggregate(agg, function(err, logs){
  if (err) { return console.log(err); }
  return console.log(logs);
});
于 2022-01-25T21:02:35.547 回答