请教一下表连接应该怎么做?
发布于 7 年前 作者 caowei 9705 次浏览 最后一次编辑是 6 年前 来自 官方Issues

大家好,我最近刚刚开始做小程序的开发,对云数据库的操作有很多疑问,请教一下关于表连接的写法

我有两个表 商品表goods 和 商品类型表goods_type

商品表字段:_id name goodsTypeid

商品类型表字段:_id,title

我希望能一次性获取到 __商品表__信息,同时每个商品对应的__商品类型title__也拿到

现在我是这么写的

 cloud.database().collection("goods")
    .aggregate()
    .lookup({
      //表连接 A+B
      from'goods_type',
      //A表字段
      localField'goodsTypeId',
      //对应B表字段
      foreignField'_id',
      //B表别名
      as'goodsTypeList'
    })
    .end();

这样我确实拿到了__商品表__的信息,但是__商品表里的类型__是数组的形式给我的,数组里有一条数据,就是商品对应的类型

请问我应该怎么做才可以直接获取到__类型title__,而不是数组呢?

1 回复
  var db = cloud.database()
  var $ = db.command.aggregate
  return db.collection('goods').aggregate()
    .lookup({
      from"goods_type",
      localField: "goodsTypeId",
      foreignField: "_id",
      as"goodsTypeList"
    })
    .replaceRoot({
      newRoot: $.mergeObjects([ $.arrayElemAt(['$goodsTypeList'0]), '$$ROOT' ])
    })
    .project({
      goodsTypeList: 0
    })
    .end()

照着lookup的例子做出来了,实现了我想要的效果,只是不明白怎么实现的...

.replaceRoot({
      newRoot: $.mergeObjects([ $.arrayElemAt(['$goodsTypeList'0]), '$$ROOT' ])
    })
    .project({
      goodsTypeList0
    })

尤其是这一部分

回到顶部