TL; Я делаю приложение для столовой. У меня есть коллекция с людьми и коллекцией, где я «регистрирую» каждое мясо. Мне нужно знать тех, кто НЕ принимал еду.Meteor, mongodb - оптимизация столовой
Длинная версия:
Я делаю приложение для моего местного отделения Красного Креста.
Я пытаюсь оптимизировать эту ситуацию:
есть столовая на Wich то помогли люди могут принимать пищу на завтрак, обед и ужин. Нам нужно знать, сколько из них приняло еду (и это легко).
Если они присутствуют, им нужно принять еду и поесть, поэтому нам нужно знать, сколько (и кто) НЕ ЕЩЕ (это та часть, которую мне нужно оптимизировать).
Когда они берут еду, «кассир» вставляет свой штрих-код, программа регистрирует «транзакцию» в коллекции журнала.
На самом деле, на создание шаблона «столовке» создать местную коллекцию «обедов» и заполнить его с данными всех людей в БД, (так ID, имя, пост/сытым), затем я использую эту коллекцию для своих прилавков и показываю, кто взял еду, а кто нет. (переменный «mealKind» является = «завтраком» ИЛИ «обед» или «обед» в зависимости от фактической сервировки.)
Template.canteen.created = function(){
Meals=new Mongo.Collection(null);
var today= new Date();today.setHours(0,0,1);
var pers=Persons.find({"status":"present"},{fields:{"Name":1,"Surname":1,"barcode":1}}).fetch();
pers.forEach(function(uno){
var vediamo=Log.findOne({"dest":uno.codice,"what":mealKind, "when":{"$gte": today}});
if(typeof vediamo=="object"){
uno['eat']="satiated";
}else{
uno['eat']="fasting";
}
Meals.insert(uno);
});
};
Template.canteen.destroyed = function(){
meals.remove({});
};
Из коллекции еды я estrapolate два colums людей сытых (с именем, фамилия и штрих-код) и пост, и я также использую два помощника:
fasting:function(){
return Meals.find({"eat":"fasting"});
}
"countFasting":function(){
return Meals.find({"eat":"fasting"}).count();
}
//same for satiated
Это было хорошо, но сейчас количество людей действительно растет (мы arount 1000 и подсчета голосов), а также создание страницы очень очень медленно, и обычно он останавливается с ошибками, поэтому я могу прочитать, что «100 голода, 400 сыты», но у меня около 1000 человек в БД.
Я не могу понять, как оптимизировать рабочий процесс, каждый другой метод, который я пытался вовлечь (тем или иным способом) больше запросов к БД; Я думаю, что я пропустил этот момент, и теперь я не вижу его. Я не уверен в агрегации на этом уровне и внутри метеор из-за minimongo.
Несмотря на то, что эта сторона сервера, а не клиентская, умна, проблема здесь заключается в том, что «голодание» отличается от «насыщенного» без использования всей коллекции людей.
+1, если раствор совместим с aleed: табличной
Похоже, вы полностью полагаетесь на базу данных minimongo на стороне клиента для отслеживания 'Meals'? Что произойдет, если ваш браузер выйдет из строя/случайно закрыт? – ghybs
Да, я полностью полагаюсь на это. Если браузер перезагружается при повторном входе в приложение, событие onCreated запускает и воссоздает локальную коллекцию. Сборник, поддерживаемый сервером, более сложный, потому что каждый день я должен его очищать ... – Aleritty
Извините, неверно заданный вопрос, когда кассир вставляет транзакцию, я, конечно, вставляю документ в коллекцию журнала. Итак, у меня есть длинный трек блюд. Если сбой браузера, он может восстановиться без потери данных. – Aleritty