基于其他集合的 Mongoose 过滤元素

Mongoose filter elements based on other collection

我有三个合集:

  1. User 有一些用户数据

    id: ObjectId

  2. Post 这是一个 post 一个 User 可以做的 - 它有一个对 User.id

    的引用

    id: ObjectId author: {ref: 'User'} text: String datePosted: Date

  3. User.reportsUser.idPost.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);

我的问题是:如何跳过 User 报告的 Posts - 它们在 User.reports 集合中,并且总是 return 适量Posts(在本例中为 10)?

我明白你现在的意思了。因此,基本上您希望在查找查询中使用 $nin 运算符来消除用户报告的 Post id 数组中的 id。

在您当前的架构中,这意味着 运行 两个查询,首先从您的报告集合中检索报告的 post 与用户匹配的 ID,然后 运行 查询如下:

   Post.find( { _id: { $nin: arrayOfPostIds }}).....

如果您能够将报告放在用户模式中,那就更容易了,因为它可以节省查询,但我知道在某些情况下,最好也将它们放在自己的集合中。