各位大神,这个demo怎么改成联表查询?
发布于 5 年前 作者 qiang14 13592 次浏览 来自 官方Issues
const cloud = require('wx-server-sdk')cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV})const db = cloud.database()const MAX_LIMIT = 100exports.main = async (event, context) => {
  // 先取出集合记录总数
  const countResult = await db.collection('todos').count()
  const total = countResult.total  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })}

// 云函数入口文件

const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database({env:'pmis - 4c63d'})

const $ = db.command.aggregate

const _=db.command

const MAX_LIMIT = 100

// 云函数入口函数

exports.main = async(event, context) => {

  const countResult = await db.collection('jxgs').aggregate()

    .lookup({

      from: 'jxgsquexian',

      let: {

        bdzname: '$bdzname',

        sbyxbh: '$sbyxbh'

      },

      pipeline: $.pipeline()

        .match(_.expr($.and([

          $.eq(['$bdzname', '$$bdzname']),

          $.eq(['$sbyxbh', '$$sbyxbh'])

        ])))

        .done(),

      as: 'quanxianList',

    }).count("total").end();

  const total = countResult.total

  // 计算需分几次取

  const batchTimes = Math.ceil(total / MAX_LIMIT)

  // 承载所有读操作的 promise 的数组

  const tasks = []

  for (let i = 0; i < batchTimes; i++) {

    const promise = db.collection('jxgs').aggregate()

      .lookup({

        from: 'jxgsquexian',

        let: {

          bdzname: '$bdzname',

          sbyxbh: '$sbyxbh'

        },

        pipeline: $.pipeline()

          .match(_.expr($.and([

            $.eq(['$bdzname', '$$bdzname']),

            $.eq(['$sbyxbh', '$$sbyxbh'])

          ])))

          .done(),

        as: 'quanxianList',

      }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).end();

    tasks.push(promise);

  }

  // 等待所有

  return (await Promise.all(tasks)).reduce((acc, cur) => {

    return {

      data: acc.data.concat(cur.data),

      errMsg: acc.errMsg,

    }

  })

}

这么改有什么问题?折腾好几天了,哪位大神指点一下

回到顶部