8***@qq.com
8***@qq.com
  • 发布:2022-11-06 11:36
  • 更新:2023-01-28 14:11
  • 阅读:498

uniCloud 联表查询后根据最新数据,分组,取最新数据,在分页

分类:uniCloud

大佬们好,有个问题弄了很久没搞定,希望大佬能指点下

场景,数据库中有12位用户的用户表, 有一张记录访问的记录表,
用户每访问一次,就有一条记录

记录表中只有 访问者的用户id、访问时间,

现在 有位用户要查询其他11位访问他的记录情况

前端页面是一个列表显示展示的

现在做联表查询访问者头像等基本信息后,在分页里面就会有很多同一个用户访问的记录,
只是访问时间不一样

期望 联表查询后,只需要每位用户的最新访问的,而且需要根据访问者 最新访问的时间倒序排序分页
每页6位访问者的最新记录, 并且还要增加一个字段,这位用户访问了几次
不是6条访问记录,

目前我只实现了查6条记录,而不是6位用户最新的记录
请问怎么弄这个最新记录的分页,谢谢大家,大佬们

已经实现的部分查询 如下
const db = uniCloud.database();
const c = db.collection('visitor')
const {
pageNo,
pageSize,
id
} = event
const startIndex = pageNo * pageSize
const $ = db.command.aggregate
const {
data
} = await c.aggregate()
.match({
toId: id
})
.lookup({
from: 'userAppend',
let: {
lrid: '$lrid'
},
pipeline: $.pipeline()
.lookup({
from: 'users',
let: {
lrid: '$lrid'
},
pipeline: $.pipeline()
.match({
lrid: id
})
.project({
_id: 0,
avatarUrl: 1,
Ta: 1,
Tg: 1,
gender: 1
})
.done(),
as: 'userList'
})
.project({
_id: 0
})
.done(),
as: 'userAppend'
})
.replaceRoot({
newRoot: $.mergeObjects([$.arrayElemAt(['$userAppend', 0]), '$$ROOT'])
})
.replaceRoot({
newRoot: $.mergeObjects([$.arrayElemAt(['$userList', 0]), '$$ROOT'])
})
.skip(startIndex)
.limit(pageSize)
.project({
_id: 0,
userAppend: 0,
userList: 0
})
.sort({
'createTime': 1
})
.end()

2022-11-06 11:36 负责人:无 分享
已邀请:
8***@qq.com

8***@qq.com (作者) - 前端酱油

已经实现

代码如下,大家可以参考下
const db = uniCloud.database();
const c = db.collection('visitor')
const {
pageNo,
pageSize,
id
} = event
const startIndex = pageNo * pageSize
const dbCmd = db.command
const $ = dbCmd.aggregate
const {
data
} = await c.aggregate()
.match({
toId: id
})
.group({
_id: '$fromId',
createTime: $.max('$createTime'),
visitorNum: $.sum(1)
})
.skip(startIndex)
.limit(pageSize)
.lookup({
from: 'userAppend',
let: {
u_id: '$_id'
},
pipeline: $.pipeline()
.match(dbCmd.expr($.eq(['$lr_id', '$$u_id'])))
.lookup({
from: 'users',
pipeline: $.pipeline()
.match(dbCmd.expr($.eq(['$lrid', '$$u_id'])))
.project({
_id: 0,
avatarUrl: 1,
Ta: 1,
Tg: 1,
gender: 1
})
.done(),
as: 'userList'
})
.project({
_id: 0,
lr_id: 0
})
.done(),
as: 'userAppend'
})
.addFields({
fromId: '$_id'
})
.replaceRoot({
newRoot: $.mergeObjects([$.arrayElemAt(['$userAppend', 0]), '$$ROOT'])
})
.replaceRoot({
newRoot: $.mergeObjects([$.arrayElemAt(['$userList', 0]), '$$ROOT'])
})
.project({
_id: 0,
userAppend: 0,
userList: 0
})
.end()

呆

想要请教下这个问题

  • 8***@qq.com (作者)

    搞完就没上过,我都忘记这个是怎么回事了

    2024-02-01 14:00

要回复问题请先登录注册