如何对每个结果运行猫鼬查询以汇总数据?

时间:2018-12-25 14:58:43

标签: node.js express mongoose mongoose-schema

我想知道用户是否喜欢一本书,并根据查看结果的状态(喜欢/不喜欢)显示一颗心。

问题在于第二个查询的值在该函数之外不可用。

我尝试在内部使用异步函数,但没有任何结果。我还尝试将书籍添加到数组中并返回它,这将得到一个空数组。

var bookQuery = Book.find({ title: req.body.title}, {}, { skip: 0, limit: 200 })
.sort({ name: 1 });

bookQuery.lean().exec(function (err, books) {
  books = books.map(function (book) {
    Like.findOne({ object: book._id, likedby: req.session.passport.user }).exec(function (err, like) {
      book.liked = (like != null) ? 1 : 0;
      // Here it's available
    });

    return book;
  });

  cb(books);
}, cb);

我想为每本书添加一个字段,其中包含Like查询中的值。 现在,它仅显示书籍。

1 个答案:

答案 0 :(得分:1)

因此,您知道Node JS中很多事情都是异步的,因此您无法从回调函数外部获取结果。对于回调,您可以仅使用async模块以避免callback hellsasync模块在​​Node JS开发人员中非常流行,因此,如果您使用回调,我强烈建议使用async。它有数十种方法可以简化和丰富您的代码。

但是,ES6附带了许多新的有用的功能。这些功能之一是Promise。它是基于回调开发的,可以轻松地编写异步函数。克服异步功能的一种简单方法是async/await。实际上,有generator functions