Я пытаюсь обновить счет на pre hook. Проблема в том, что по какой-то неизвестной причине крюк findOneAndUpdate
не имеет доступа к документу, насколько я могу судить.Mongoose pre findOneAndUpdate hook issues
Я хотел бы сделать это:
source.pre('findOneAndUpdate', function (next) {
console.log('------------->>>>>> findOneAndUpdate: ');
this.objects = this.objects || [];
this.people = this.people || [];
this.events = this.events || [];
this.objectCount = this.objects.length;
this.peopleCount = this.people.length;
this.eventCount = this.events.length;
next();
});
Но по какой-то причине this
в крюке не является документом, его объект запроса, который, кажется, о бесполезен.
Что мне не хватает? Как использовать предварительный крючок для обновления счетчиков на findOneAndUpdate?
Подсчеты есть, поэтому я могу вернуть полный список элементов с помощью 'find' и исключить массивы, поскольку я не хочу получать данные, когда возвращаю полный список. Итак, как мне автоматически обновить счет? Для меня предварительный крючок без доступа к документу довольно бессмыслен. – Justin808
@ Justin808, если вы хотите вернуть размеры массива, подумайте об использовании [агрегации] (http://docs.mongodb.org/manual/reference/operator/aggregation/size/). Если вы хотите обновить подсчеты, вам нужно сначала получить полный документ из базы данных, обновить значения, обновить подсчеты (или использовать для этого промежуточное программное обеспечение _document_, например 'pre ('save'))' и сохранить его обратно в базу данных. Вы не можете сделать это в обновлении по причинам, объясняемым. – robertklep
Я думаю, я не понимаю вещь '$ size'. В настоящий момент я делаю 'SourceModel.find ({treeId: treeId}, '-объекты-люди-события, обратные вызовы)'. Где я могу добавить '$ size' туда, чтобы вернуть размер массивов' objects', 'people' и' events'? – Justin808