uni-app中unicloud-db组件联表查询怎样设置副表别名

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app中unicloud-db组件联表查询怎样设置副表别名

2 回复

min(_id.goods-sku.name) as goodsname


在uni-app中使用unicloud-db组件进行联表查询时,可以通过设置副表的别名来简化查询语句并提高可读性。在UniCloud的数据库中,联表查询通常使用join操作,而在UniCloud的数据库API中,这可以通过$join操作符来实现。下面是一个使用副表别名的代码示例:

假设我们有两个表:usersorders,其中 orders 表有一个 user_id 字段指向 users 表的 _id 字段。我们希望通过联表查询获取用户及其订单信息,并为 orders 表设置一个别名 o

// 引入uniCloud的db模块
const db = uniCloud.database()

// 定义主表(users)和副表(orders)的集合引用
const usersCollection = db.collection('users')
const ordersCollection = db.collection('orders')

// 执行联表查询
usersCollection
  .field({
    _id: true,
    name: true,
    // 使用$join进行联表查询,并为orders设置别名o
    orders: db.command.aggregate.lookup({
      from: 'orders', // 副表集合名
      localField: '_id', // 主表关联字段
      foreignField: 'user_id', // 副表关联字段
      as: 'o' // 副表的别名
    })
  })
  .aggregate()
  .match({
    // 可以在这里添加查询条件,例如只查询有订单的用户
    'o': { $exists: true, $ne: [] }
  })
  .unwind('$o') // 如果需要展开数组,可以使用unwind
  .then(res => {
    console.log(res.result)
  })
  .catch(err => {
    console.error(err)
  })

在这个示例中:

  1. 我们使用 db.collection('users')db.collection('orders') 分别获取了 usersorders 集合的引用。
  2. usersCollection 上调用 .field() 方法指定了我们想要返回的字段,其中包括一个通过 $join 操作符实现的联表查询。
  3. $join 操作符中的 from 字段指定了副表集合名 orderslocalFieldforeignField 分别指定了主表和副表的关联字段,as 字段指定了副表的别名 o
  4. .aggregate() 方法用于执行聚合查询。
  5. .match() 方法用于添加查询条件,这里我们添加了只查询有订单的用户的条件。
  6. .unwind('$o') 方法用于展开 orders 数组(如果需要的话)。

这样,你就可以在uni-app的unicloud-db组件中实现联表查询,并为副表设置别名了。

回到顶部