首页 > 解决方案 > 如何使用 node 和 mongoose 或 mongo 对文档数组进行分页?

问题描述

{
"_id" : ObjectId("5f0083848f162b38900dc113"),
    "isEmailVerified" : false,
    "isProfileSetup" : true,
    "my_events" : [ 
        ObjectId("5f005a63b5524eb74813de11"), 
        ObjectId("5f005a5bb5524eb74813de0c"), 
        ObjectId("5f017dfcf8e6d8615cddfd6f")
    ]
}

我在用户的集合中有这个文档,我正在尝试仅对数组 my_events 进行分页。如果这是一个愚蠢的问题,我很抱歉。

首先,这是否可以在没有事件完全从数据库中获取它的情况下对该数组进行分页,如果是,请在此处分享方式。

{{url_local}}/api/event?user_id=5f0083848f162b38900dc113&page=1&limit=2

上面的调用应该找到提到 user_id 的用户,并且应该只返回这些值:-

ObjectId("5f005a63b5524eb74813de11"),
ObjectId("5f005a5bb5524eb74813de0c")

和,

{{url_local}}/api/event?user_id=5f0083848f162b38900dc113&page=2&limit=2

它应该返回这个: -

ObjectId("5f017dfcf8e6d8615cddfd6f")

标签: node.jsdatabasemongodbmongoosemongodb-query

解决方案


这可以通过 MongoDB 中的聚合来实现,请检查https://docs.mongodb.com/manual/reference/operator/aggregation/arrayElemAt/

但总的来说,由于数据库上的聚合很重,分页的优势将会丢失,您应该考虑更改文档结构并为子文档创建一个集合,并尽可能添加对父文档的引用。


推荐阅读