通过mongo中的填充字段查询[重复]

Posted

技术标签:

【中文标题】通过mongo中的填充字段查询[重复]【英文标题】:query through populated field in mongo [duplicate] 【发布时间】:2018-10-01 16:50:00 【问题描述】:

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

我尝试在查询对象中使用reviews[0].description,但没有成功。

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;
        );
    

【问题讨论】:

所以您搜索的是评论而不是书籍。我说的对吗? @num8er 是的,我想同时搜索。所以书籍字段将是标题,然后还从评论中搜索描述 所以你有一个以titledescription 为属性的图书模式,对吗? @GeorgeBailey 是的,这是正确的。在书籍架构中......我有标题、描述和评论(它是对评论表的引用)。在评论表中,我也有标题和描述 是的,这是最常用和欣赏的。我完全同意 【参考方案1】:

您想要搜索与您的查询匹配的书籍并填充评论。

所以 documentation 你有权使用 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);
  
;

更新:

据我了解,您想同时查询评论和书籍。

    在 Review 模型中有 book 字段,它将保留书籍 _idtitledescription。 当用户添加评论时,只需将该图书数据放入评论文档中即可。 直接查询评论集合。

【讨论】:

没用 :( @HeelMega 我在您的问题下添加了一些评论。你必须建立一些索引集合。 Mongodb 不允许这样复杂的查询。 是的,我认为这是要走的路 @HeelMega 或者如果您在路径的开头,请切换到 mysql、Postgres 并作为 ORM 使用 Sequelize 现在...我得到了一个大数组中所有评论的_id。我如何将它们放在我的查询中,因为它是一个数组而不仅仅是一个字符串

以上是关于通过mongo中的填充字段查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用多个 mongo 查询填充数组 [重复]

Mongo 在 Meteor 应用程序中的 _id_ 字段上给出重复键错误

mongodb查询,如何只查询出某一个字段的值?

无法通过 Mongo(mongoose)中的点符号搜索子文档 [重复]

无法通过 Mongo(mongoose)中的点符号搜索子文档 [重复]

使用 Excel 表中的数据填充 Web 文本字段、提交页面、重复吗?