Изменение результатов запроса Mongoose - PullRequest
0 голосов
/ 05 января 2019

Я работаю над учебным курсом MDN для ExpressJS с Mongoose и Async , и в какой-то момент я пытаюсь выполнить запрос для всех книг, а затем сопоставить это с дополнительными запросами к найдите количество BookInstances для каждой книги. (Например, я хочу показать таблицу всех книг в базе данных, а затем перечислить, сколько у нас копий)

// Display list of all books.
exports.book_list = function(req, res) {
  Book.find({}, 'title author')
    .exec(function(err, list){
      if (err) {return next(err);}

      async.map(list, function(book, next){
        BookInstance.countDocuments({book: book.id}, function(err, count){
          // Try and add the bookinstance count to the book object
          // use next(null, book);
        });
      }, function(err, modified_list){
        res.send(modified_list);
      });
    });
};

Однако следующее ничего не делает:

book.count = count
next(null, book);

И не делает:

book.set("count", count");
next(null, book);

В обоих примерах предмет остался неизменным. Однако следующее возвращает то, что я ожидал:

var obj = {book: book, count: count};
next(null, obj);

Документы Mongoose описывают, что find () возвращает документы, но я не могу понять, почему они кажутся неизменяемыми или что такое документ на самом деле. Есть ли способ для меня, чтобы просто добавить свойство count к исходному возвращенному объекту и не переносить его в другой объект?

1 Ответ

0 голосов
/ 06 января 2019

Если свойство не определено в модели, то mongoose не позволяет напрямую добавить это свойство. Однако вы можете использовать document._doc для изменения и добавления новых свойств в документ.

...