收藏
回答

sort多字段排序失效,怎么解决?

 var px={} 

px.zh=1

px.xh=1

  希望先通过组号排序,组号相同的情况下,再通过序号排序,传给云函数的SORT后,都是按序号排序,组号排序无效,单独用一个字段,组号排序有效    

return await db.collection('bisaishuju').aggregate().sort(event.px).match(event.match)

    .lookup({

      from: 'yundongyuan',

      localField: 'dwid',

      foreignField: 'dwid',

      localField: 'bh',

      foreignField: 'bh',

      as: 'yundongyuan',

    }).replaceRoot({

      //replaceRoot指定一个已有字段作为输出的根节点,也可以指定一个计算出的新字段作为根节点。

      //newRoot  代表新的根节点

      newRoot: $.mergeObjects([$.arrayElemAt(['$yundongyuan', 0]), '$$ROOT'])

      //mergeObjects 累计器操作符

      //$.mergeObjects([params1,params2...]) 可以合并多个元素

      //$.arrayElemAt(['$uapproval', 0]), '$$ROOT']

      //就是取uapproval数组的第一个元素,与原始的根融合在一起

    }).project({

      //project把指定的字段传递给下一个流水线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段

      _openid: 0, dwid: 0, xmid: 0, fzid: 0, yundongyuan: 0, mima:0

    }).skip(event.skip).limit(event.limit).end()

    .then(res => {


      return (res);

    })

    .catch(err => {


      return (err);

    })



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

2 个回答

  • 张建明
    张建明
    2020-09-29

    问题已经解决:其实,开发者文档中是写错的,多字段排序并不是sort({字段1:升降序,字段2:升降序...})这样写的,应该是.sort({字段1:升降序}).sort({字段2:升降序})....这样写,写法与SQLserver也有区别,比如,此处,应该是先按序号排序,再按组排序,而不是SQL中的习惯,先按组排序,再按序号排序

    2020-09-29
    有用
    回复
  • K'
    K'
    2020-09-23

    .sort()写在.project()后面...试试

    2020-09-23
    有用
    回复 5
    • 张建明
      张建明
      2020-09-24
      也没用
      2020-09-24
      回复
    • K'
      K'
      2020-09-24回复张建明
      你可以用looukup的”2. 自定义连接条件、拼接子查询“试试看;先按组号输出后的运动员,再将这些人按序号排序,最后再输出。
      文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.lookup.html
      2020-09-24
      回复
    • 张建明
      张建明
      2020-09-24
      return await db.collection('bisaishuju').aggregate().sort(event.px).match(event.match)
          .lookup({
            from: 'yundongyuan',
            localField: 'dwid',
            foreignField: 'dwid',
            localField: 'bh',
            foreignField: 'bh',
            as: 'yundongyuan',
          }).replaceRoot({
            //replaceRoot指定一个已有字段作为输出的根节点,也可以指定一个计算出的新字段作为根节点。
            //newRoot 代表新的根节点
            newRoot: $.mergeObjects([$.arrayElemAt(['$yundongyuan', 0]), '$$ROOT'])
            //mergeObjects 累计器操作符
            //$.mergeObjects([params1,params2...]) 可以合并多个元素
            //$.arrayElemAt(['$uapproval', 0]), '$$ROOT']
            //就是取uapproval数组的第一个元素,与原始的根融合在一起
          }).project({
            //project把指定的字段传递给下一个流水线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段
            _openid: 0, dwid: 0, xmid: 0, fzid: 0, yundongyuan: 0, mima:0
          }).skip(event.skip).limit(event.limit).end()
          .then(res => {
            return (res);
          })
          .catch(err => {
            return (err);
          })
      2020-09-24
      回复
    • 张建明
      张建明
      2020-09-24
      我是这样写的
      2020-09-24
      回复
    • K'
      K'
      2020-09-24回复张建明
      大概这个思路试试看,具体还要看你集合里的数据是怎么样的。
      具体再看看lookup文档介绍
      2020-09-24
      回复
登录 后发表内容
问题标签