学习任何一门新的语言都很需要耐心的。
Collection.aggregate():发起聚合操作,定义完聚合流水线阶段之后需调用 end 方法标志结束定义并实际发起聚合操作
连表条件查询
exports.main = async (event, context) => {
.....省略了......
// 以下查询结果为: 满足match里面条件的accounts表数据和其有相对应user_id的users表数据的集合
return await db.collection('accounts')
.aggregate().match({ // 对主表accounts 添加筛选条件
'group_id': event.groupId,
'account_time': _.gte(lastTime),
'utype': event.utype
})
.lookup({ // 左外连接副表users
from:'users',
localField: 'user_id', // 指定主表的关联字段
foreignField: 'openid', // 指定副表的关联字段
as: 'userInfo' // 把副表的查询结果放到userInfo对象里面
})
.end()
})
3个表也可以查询
exports.main = async (event, context) => {
try {
return await db.collection('settlement')
.aggregate().match({
settle_group_id: event.groupId
}).lookup({
from:'users',
localField: 'settle_user_id',
foreignField: 'openid',
as: 'userInfo'
})
.lookup({
from:'groups',
localField: 'settle_group_id',
foreignField: 'group_id',
as: 'groupInfo'
})
.end()
} catch (error) {
console.log(error)
}
}
清空表数据
db.collection('users').
where({
_id: _.all
})
.remove()
排序、限制查询条数
// 查找最近一次结算账单的时间
await db.collection('settlement')
.where({
settle_group_id: event.groupId
})
.field({
settle_date: true,
settle_user_id: true,
})
.orderBy('settle_date', 'desc') // 根据settle_date倒叙排
.limit(1) // 只查一条数据
.get()
.then(res => {
if(res.data.length > 0) {
const lastTime = res.data[0]['settle_date']
}
})