2017-01-14 6 views
0

ユーザー・スキーマ(マングース)リストは、distinctメソッドのように(コレクションが大きすぎる、メモリに影響する可能性があります)しません。数える異なる値

私は次の操作を実行しようとしている:

User 
    .distinct('name') 
    .count() 
    .exec(); 

しかしcount方法はユーザーコレクション内のすべてのオブジェクトの数を返すの異なるフィルタを上書きしているようです。

限定されたメモリ環境でMongoDBコレクションプロパティの異なる値を数える有効な方法は何ですか?

+0

distinctメソッドから返された配列に 'length()'を使用できますか? – Veeram

+0

@Veeram配列が大きすぎるため、限られたメモリ環境には適さない –

答えて

2

は、次のような集計を使用してそれを達成することができます:$group集約インサイド

User.aggregate([ 
    { $group: { _id: null, names:{$addToSet:"$name"} } }, 
    { $project: { count: { $size: "$names" } } } 
]) 
.exec(function(err, users){ 
    console.log(users.count) 
}) 

$addToSetオペレータはnamesアレイ内の各一意の名前を追加します。 $projectアグリゲーションでは、配列namesのサイズを$sizeオペレータで数え、その値をcountプロパティに割り当てます。

関連する問題