У меня есть коллекция комментариев и коллекция страниц. Комментарии принадлежат страницам. Пользователи могут обновлять комментарии, и я хочу отобразить агрегированную сумму всех голосов комментариев, принадлежащих странице. Что было бы хорошим способом сделать это?Должен ли я использовать AutoValue для хранения агрегированных значений коллекции?
Я думал о том, чтобы держать сумму в AutoValue внутри коллекции страниц. Будет ли способ иногда инициировать пересчет AutoValue? Мне не нужна сумма, которая будет обновляться в реальном времени, раз в 5 минут.
Или это плохая идея? Было бы лучше использовать ReactiveVar в шаблоне для вычисления или что-то еще?
Редактировать: На самом деле нет особых особенностей в настройке. Просто коллекция комментариев с числовым атрибутом «голосов» и коллекцией страниц с числовой оценкой «оценка», которая должна подсчитывать голоса. Страницы:
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