Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何对每个结果运行Mongoose查询以聚合数据?_Node.js_Express_Mongoose_Mongoose Schema - Fatal编程技术网

Node.js 如何对每个结果运行Mongoose查询以聚合数据?

Node.js 如何对每个结果运行Mongoose查询以聚合数据?,node.js,express,mongoose,mongoose-schema,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, b

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

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

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

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查询。
现在它只显示书籍。

因此,您知道Node JS中有很多东西是异步的,您无法从回调函数外部获得结果。对于回调,您可以只使用模块来避免。模块在NodeJS开发人员中非常流行,所以如果您使用回调,我强烈建议您使用。它有几十种方法,可以简化和丰富您的代码


然而,ES6带来了许多新的和有用的功能。这些功能之一是。它是基于回调开发的,可以轻松编写异步函数。还有一种克服异步函数的简单方法是。实际上,有。

谢谢你的评论。是的,我知道Node.js中有async,并且在Like.findOne上尝试了async/await,但是我无法让它工作,map函数也不能是异步的。把书拿出来并展示出来效果很好,我只是无法添加类似的部分。我似乎找不到任何关于在Mongoose中运行嵌套查询的例子,就像我在上面尝试做的那样。你能举个例子吗?