收藏
回答

使用lookup查询时被连接集合的数量怎么控制?

使用lookup查询时被连接集合的数量怎么控制?比如这个列子中 books 返回的数量。

const db = cloud.database()
db.collection('orders').aggregate()
  .lookup({
    from: 'books',
    localField: 'book',
    foreignField: 'title',
    as: 'bookList',
  })
  .end()
  .then(res => console.log(res))
  .catch(err => console.error(err))
回答关注问题邀请回答
收藏

2 个回答

  • Japper
    Japper
    08-17

    兄弟问题解决了吗,我也遇到了这个问题,被联的表很大,我只想要部分数据进行联表查询

    08-17
    有用
    回复
  • Sam
    Sam
    06-28

    其实不难,连接查询之后可以用limit进行返回函数的结果集进行数量返回,我用原先我写过的两张表给你举个例子:

    // category_list表
    {
     "_id": 1,
     "title": "粤菜"
    }
    // menu_list 表
    {
    "_id": "f10018335eaa51ab002239cf4c705b38",
    "categoryType": "1",
    ....
    }
    
    // sql连接查询:menu_list 左连接 category_list表,查询食物菜系结果集,且返回前两条数据
    db.collection('menu_list')
      .aggregate()
      .lookup({
        from: 'category_list',
        localField: 'categoryType',
        foreignField: '_id',
        as: 'resultList',
      })         // 连接查询产生的结果集合
      .limit(2) // 用limit返回前2条数据
      .end()
    
    


    测试结果:

    06-28
    有用
    回复 3
    • KaySarjan.M 😘💕
      KaySarjan.M 😘💕
      07-04
      这样只能控制category_list数量,无法控制menu_list的数量啊?
      07-04
      回复
    • Sam
      Sam
      07-04回复KaySarjan.M 😘💕
      这个控制不就是menu_list的数量吗?limit(2)输出的结果集就是两条
      07-04
      回复
    • Japper
      Japper
      08-17
      您好,我也遇到了楼主的问题,其实是这样的,联表查询时,主表可以通过match过滤掉大量不需要用到的数据,但是,被联的表无法过滤,导致lookup这一步开销太大经常卡住,不知有没有啥解决方法?
      08-17
      回复
登录 后发表内容
问题标签