9

nodejs の mongoose を調査しているときに、コレクション内のユーザーの量を知る必要があるという問題に遭遇しました。

私のコレクションにはレコードがあり、各レコードにはユーザーがいます。ユニーク (異なる) ユーザーの数を知りたい。

どうすればマングースでこれを行うことができますか?

編集:

データベースは非常に急速に成長しています。すべての個別のレコードを取得してカウントする代わりに、DB から数値を取得する方法はありますか?

4

6 に答える 6

16

ReddestのアプローチをMongoose 3.1.2で試したときに例外が発生したため、別の回答を次に示します(Reddestのアプローチは問題ないはずなので、これはMongooseのバグのようです)。

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);

Mongoose クエリ: http://mongoosejs.com/docs/queries.html

MongoDB 個別クエリ: http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct

于 2012-09-17T00:14:39.287 に答える