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);
})
问题已经解决:其实,开发者文档中是写错的,多字段排序并不是sort({字段1:升降序,字段2:升降序...})这样写的,应该是.sort({字段1:升降序}).sort({字段2:升降序})....这样写,写法与SQLserver也有区别,比如,此处,应该是先按序号排序,再按组排序,而不是SQL中的习惯,先按组排序,再按序号排序
.sort()写在.project()后面...试试
文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.lookup.html
.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);
})
具体再看看lookup文档介绍