收藏
回答

云开发数据连表查询结果是对象数组, 如何只取第一个值作为对象返回?

 let result = await db.collection('social-dynamic')
    .aggregate()
    .match({
      _id: id
    })
    .lookup({
      from'social-user',
      localField: 'openid'//<输入记录的要进行相等匹配的字段>,
      foreignField: 'openid'//<被连接集合的要进行相等匹配的字段>,
      as'userInfo'//<输出的数组字段名>
    })
    .addFields({
        userInfo: $.arrayElemAt(['$userInfo'0])
    })
    .project({
        _id: 1,
        _createTime: 1,
        imgUrls: 1,
        imgs: 1,
        openid:1,
        text: 1,
        userInfo:1
      })
    .end()


想要结果


回答关注问题邀请回答
收藏

1 个回答

  • 老张
    老张
    2021-11-11

    1、再unwind一下即可;

    2、list居然是个对象吗?啥时候它也应该是个数组啊。要不别叫list,要不就第一种。let user = list[0]不香吗?

    2021-11-11
    有用
    回复 2
    • @
      @
      2021-11-11
      第二张图 list临时演示没改名,就是用list[0]这样返回的,感觉用数据库语句应该可以做到吧,不知道是不是arrayElemAt这个方法
      2021-11-11
      回复
    • @
      @
      2021-11-11
      unwind也是对数组下对象的属性进行处理的吧
      2021-11-11
      回复
登录 后发表内容