meteorhacksaggregate
を使用している場合 .aggregate()
を実装するパッケージ コレクションに対してコマンドを実行すると、応答として配列のみが返されます。したがって、それを公開されたコレクションの形式に変換する必要があります。
Meteor.publish("completedLB,function() {
var self = this;
var results = userCompleted.aggregate([
{ "$match": { "progressState": true } },
{ "$group": {
"_id": "$userId",
"progressState": { "$first": "$progressState" },
"count": { "$sum": 1 }
}},
{ "$sort": { "_id": 1 } }
]);
_.each(results,function(result) {
self.added("client_collection_name",Random.id(), {
userId: result._id,
progressState: result.progressState,
count: result.count
});
});
self.ready();
});
または、 false
を含める 提案された出力がそれ自体を示唆していると見なされます:
{ "$group": {
"_id": "$userId",
"progressState": { "$first": true },
"count": { "$sum": { "$cond": ["$progressState", 1,0] }
}},
{ "$sort": { "_id": 1 } }
$ cond
>
数値に変換するための評価。
基本的な集計では、一致した結果を「合計」しているだけで、もちろん $ sort
出力に存在するフィールドを参照します。この例では、 _id
にある「userId」値になります。 集計からのキーですが、必要に応じて合計カウントで並べ替える「カウント」にすることもできます。
その部分は、 $ sort
のようにエラーを生成していました は現在のフィールドであり、 $
のフィールド値ではありません 表記。
ただし、もちろん、クライアントがアクセス可能なコレクションとして公開するには、実際の _id
を置き換える必要があります。 何かが期待されています。したがって、ランダムIDの生成は、他のフィールドの包含と同様に、ここで機能します。
もう少し詳しく知りたい場合や、バニラインストールで機能する「ハック」パッケージの代わりに、この回答 例として完全なリストを持っている私自身による。