有两张表 ,一个是问题表,一个是收藏表,怎么在查询的时候查出这个问题表里用户是否收藏过,查询要做分页的
问题表:id,question。收藏表:id,question_id,open_id,查问题表,并且查这个每个问题下这个用户是否收藏过,没收藏过也要查出来。要做分页处理。
- 感谢各位,可能是我描述不清楚,自己解决了 ,
$.pipeline()
.match(_.expr($.and([
$.eq(['$question_id', '$$_id']),
$.eq(['$open_id', open_id]
])))
1、在云函数中用lookup实现关联查询;
2、最好改表结构:表
question:{
makrs:['openid1','openid2']
}
用 lookup 连起来就可以。
let OPENID = '用户 OpenID'; let count = 20; // 获取数据数量 let page = 1; // 获取数据的页面号 // 文章表为:articles,收藏表为:saves。 let res = await db.collection("saves").aggregate().project({ _id: 0 }) .match({ _openid: OPENID }).limit(count).skip((page - 1) * count) .lookup({ from: 'articles', localField: '_article', foreignField: '_id', as: 'list' }) .replaceRoot({ newRoot: $.mergeObjects([ $.arrayElemAt(['$list', 0]), '$$ROOT' ]) }) .project({ list: 0 }) .end();
可参考云开发的联表查询能力:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/join.html
更新了,就是不知道lookup要怎么写
db.collection('question_table')
.aggregate()
.lookup({
from: 'collect',
localField: 'question_id',
foreignField: 'id',
as: 'collect_info',
})
.match({
question_id: id
}).end();
// 查出有collect_info 的为已经收藏,排序可自行添加