私は、コメントコレクションとページコレクションを持っています。コメントはページに属します。ユーザーはコメントをアップヴォートすることができ、ページに属するコメントのすべての投票の総計を表示したい。これを行うには何が良い方法でしょうか?コレクションの集計値を格納するのにAutoValueを使うべきですか?
私は、合計をAutoValueとしてページコレクション内に保持することを考えていました。 AutoValueの再計算を時々トリガーする方法がありますか?私は合計をリアルタイムで更新する必要はなく、5分ごとに1回で十分です。
これは悪い考えですか?テンプレート内でReactiveVarを使用して計算などを行う方が良いでしょうか?
編集:セットアップには特別なことはありません。単純に数字の 'votes'属性を持つコメントコレクションと、投票を数えなければならない数値の自動点数 'score'を持つページコレクション。 ページ:
Collections.Pages = new Mongo.Collection("pages");
var PageSchema = new SimpleSchema({
name: {
type: String,
min: 1
},
score: {
type: Number,
autoValue: function (doc) {
var maxValue = 1;
Collections.Comments.find({ pageId: doc.pageId }).map(function(mapDoc){
maxValue += mapDoc.votes;
});
return maxValue;
}
},
コメント:
Collections.Comments = new Mongo.Collection("comments");
var CommentSchema = new SimpleSchema({
pageId: {
type: String
},
name: {
type: String,
optional: true
},
votes: {
type: Number,
label: 'Total Votes',
defaultValue: 0
},
スキーマとパブリッシャーのコードを投稿できますか? – zim
編集をご覧ください。パブリッシャーは投稿するだけの価値がありません。今のところ、投稿とそのコメントが返されます。 – Cos