【问题标题】:How to cache paginated data redis and mongodb nodejs如何缓存分页数据redis和mongodb nodejs
【发布时间】:2021-08-16 02:16:47
【问题描述】:

假设,我在 Mongodb 和他们的服务集合中有用户集合。

一个用户可以拥有许多服务,这些服务存储在服务集合中,并带有对用户的引用。

当请求获取用户的个人资料时,我也想要用户服务。但分页。

现在,对用户数据进行分页很容易,但是因为服务数据是数组,并且分页如何缓存它,以便以后如果服务发生更改,我可以将其删除。

如果我缓存服务,例如 Key = userId_pageNo

我以后如何知道我缓存了多少页数据需要更新或删除

【问题讨论】:

    标签: node.js mongoose caching redis pagination


    【解决方案1】:

    MongoDB 自 v3.6 起支持 Pipelines in Lookup

    您可以在用户上运行聚合管道并在服务上进行查找。在查找 piepline 中,您可以指定 $skip$limit 对数组中返回的服务进行分页。

    类似:

    Users.aggregate([
      {
        $match: {
          _id: userId
        }
      },
      { $lookup: {
        from: 'Services',
        as: 'services',
        let: { userId: '$_id' },
        pipeline: [
          { $match: {
            $expr: { $eq: [ '$obj_id', '$$user' ] }
          }},
          { $skip: pageNumber * itemCount },
          { $limit: itemCount }
        ]
      } }
    ])
    

    【讨论】:

    • 我的问题是缓存。我已经实现了分页。
    猜你喜欢
    • 2021-04-03
    • 2020-06-23
    • 2020-09-28
    • 2020-04-22
    • 2021-07-02
    • 2014-08-16
    • 2015-06-18
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多