Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Javascript 通过mongo中填充的字段进行查询_Javascript_Arrays_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 通过mongo中填充的字段进行查询

Javascript 通过mongo中填充的字段进行查询,javascript,arrays,node.js,mongodb,mongoose,Javascript,Arrays,Node.js,Mongodb,Mongoose,我想通过填充的字段进行查询。在这种情况下,填充的字段是reviews。因此,如果我搜索的查询与reviews tables描述字段匹配。。。然后把那本书还给我。评论是一个对象数组,描述是其中的关键之一 我已尝试在查询对象中使用评论[0]。说明,但无效 getBookInfo: (req, res) => { const search = req.params.search; const query = { $or: [{ title: { $regex: s

我想通过填充的字段进行查询。在这种情况下,填充的字段是reviews。因此,如果我搜索的查询与reviews tables描述字段匹配。。。然后把那本书还给我。评论是一个对象数组,描述是其中的关键之一

我已尝试在查询对象中使用评论[0]。说明,但无效

getBookInfo: (req, res) => {
        const search = req.params.search;
        const query = { $or: [{ title: { $regex: search, $options: 'i' } }] };
        Books.find(query).populate('reviews').exec(function(err, books) {
            if (err) {
                return err;
            }
            return books;
        });
    }

您希望搜索与您的查询匹配的书籍并填充评论

因此,您有权对人口使用
match

给你:

getBookInfo: async (req, res) => {
  try {
    const search = req.params.search;

    // query for books matching by condition
    const query = { 
      $or: [
        { title: { $regex: search, $options: 'i' } },
        { description: { $regex: search, $options: 'i' } },
      ] 
    };

    // include reviews matching by conditions
    const include = {
      path: 'reviews',
      match: {
        description: { 
          $regex: search, 
          $options: 'i' 
        }
      },
      options: {limit: 5}
    };

    const books = await Books
                          .find(query)
                          .populate(include)
                          .lean();
    res.status(200).send(books);
  }
  catch (error) {
    res.status(500).send(error);
  }
};
更新:

据我所知,您想查询评论和书籍

  • 在审阅模型中有
    book
    字段,该字段将保留book
    \u id
    标题
    说明
  • 当用户添加评论时,只需将该图书数据放入评论文档
  • 查询直接查看集合

  • 所以你是在评论中而不是在书中搜索。我说的对吗?@num8er是的,我想在这两个方面都搜索。所以books字段应该是title,然后还可以从reviews中搜索描述,所以您有一个图书模式,其中
    title
    description
    作为属性,对吗?@GeorgeBailey是的,这是正确的。在书中。。。我有标题、描述和评论(参考评论表)。在评论表中,我也有标题和描述。是的,这是最常用和最受欢迎的。我完全同意它不起作用:(@HeelMega我在你的问题下添加了一些评论。你必须建立一些索引集合。Mongodb不允许如此复杂的查询。是的,我认为这是解决问题的方法go@HeelMega或者,如果你在路径的开始,切换到MySQL、Postgres和作为ORM使用SequelizeNow…我得到了一个大数组中所有评论的id。我如何放置因为它是一个数组,而不仅仅是一个字符串