【问题标题】:Implement embedded paging with total pages in mongodb在 mongodb 中使用总页数实现嵌入式分页
【发布时间】:2012-02-16 15:30:50
【问题描述】:

我查看了与我的嵌入式分页情况相关的an older question。尽管带有切片的嵌入式分页工作正常,但仍然缺少 total pages 解决方案,我想知道是否可以在服务器端获取 cmets 的总大小。

有没有一种方法可以查询或计算服务器上嵌入数组的大小,而无需将整个文档提取到我的应用程序并手动计算它?

我不介意为此进行 2 次查询,1 次用于分页评论,1 次用于获取 cmets 的总数。如果我能在一个查询中做到这一点,那就太棒了。

顺便说一句,我正在使用 java 驱动程序和 spring-data mongodb。

请分享您的想法。谢谢!

【问题讨论】:

    标签: mongodb spring-data mongodb-java


    【解决方案1】:

    获取嵌入文档总数的最佳/最快方法是创建一个附加字段并在每次更新/插入后重新计算计数。 文件会是这样的

    {
      _id: 1,
      comments: [],
      commentsCount: 5
    }
    

    那么你可以在切片时简单地包含commentsCount字段:

    //this query will include only 10 comments _id and comments count of root document
    db.articles.find({}, {comments:{$slice: [20, 10]}, _id:1, commentsCount: 1}) 
    

    实际上没有其他方法可以计算嵌入文档的总数(我不是在谈论 m/r,因为它对于实时请求来说很慢)

    【讨论】:

    • 你的回答对我来说就像是爆头。在很多情况下,我一直在使用非规范化和计数,但在这种情况下我没有想到这一点。谢谢!
    • @AlbertKam:非规范化是 nosql 数据库最好的朋友;)
    猜你喜欢
    • 2012-05-12
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多