我有三个系列:
User
,其中包含一些用户数据
id: ObjectId
Post
这是User
可以发布的帖子 - 它的引用为User.id
id: ObjectId
author: {ref: 'User'}
text: String
datePosted: Date
User.reports
这是User.id
和Post.id
之间的关联,此集合中的文档表示User
已报告Post
。
id: ObjectId
user: {ref: 'User'}
post: {ref: 'Post'}
dateReported: Date
Posts
可能是巨大的(数千),所以当我检索它们时,我会做一些无限滚动 - 获得最新的10个,然后是接下来的10个......等等。
这是我的疑问:
let posts = await Post.find()
.skip(start) //0 initial
.limit(step) //step is 10
.populate('author')
.sort('-datePosted')
.exec();
return res.json(posts);
我的问题是:如何跳过Posts
所报告的User
- User.reports
集合中的Posts
,并始终返回正确数量的<div class="row w-100">
Your Elements
</div>
(在这种情况下10)?
答案 0 :(得分:0)
我知道你现在得到了什么。因此,基本上您希望在查询查询中使用$ nin运算符来消除用户报告的Post ID数组中的ID。
在当前架构中,这意味着运行两个查询,首先从与用户匹配的报表集合中检索报告的帖子ID,然后运行如下查询:
Post.find( { _id: { $nin: arrayOfPostIds }}).....
如果您能够将报告放在用户架构中,那么它会更容易,因为它会保存查询,但我知道有些情况下最好将它们放在自己的集合中。