美文网首页
MongoDB 4.0 子文档分页排序脚本实现(聚合方式)

MongoDB 4.0 子文档分页排序脚本实现(聚合方式)

作者: 闲看热闹的 | 来源:发表于2019-01-30 22:33 被阅读0次

0 运行环境

  • MongoDB Community v4.0.5
  • mongoimport r4.0.5
  • MongoDB shell v4.0.5
  • macOS 10.13.5

1 先说背景

在 MongoDB 中的 demo-db 库中有名为 topics 的集合 ,该集合类存储数据类似于论坛的发帖与回复,需要使用 MongoDB shell 进行回复数据的分页查询(按发布时间倒序,每页2条),查询时只返回回复内容,不需要其它字段信息

2 再说干货

2.1 样例数据

{
    "title": "文章标题1",
    "content": "文章内容1",
    "publish_time": {
        "$date": "2018-10-01T07:36:11.558Z"
    },
    "creator": "zhangsan1",
    "comments": [
        {
            "content": "回复内容1",
            "publish_time": {
                "$date": "2018-10-01T08:36:11.558Z"
            },
            "creator": "lisi1"
        },
        {
            "content": "回复内容2",
            "publish_time": {
                "$date": "2018-10-01T09:36:11.558Z"
            },
            "creator": "lisi2"
        },
        {
            "content": "回复内容3",
            "publish_time": {
                "$date": "2018-10-01T10:36:11.558Z"
            },
            "creator": "lisi3"
        },
        {
            "content": "回复内容4",
            "publish_time": {
                "$date": "2018-10-01T11:36:11.558Z"
            },
            "creator": "lisi4"
        },
        {
            "content": "回复内容5",
            "publish_time": {
                "$date": "2018-10-01T12:36:11.558Z"
            },
            "creator": "lisi5"
        }
    ]
}

2.2 数据导入

数据可以使用 mongoimport 命令进行导入,mongoimport默认在 MongoDB安装目录的 bin 下,建议将MongoDB安装目录的 bin配置在PATH中,方便使用

使用 json 文件导入命令如下:

mongoimport -h localhost:27017 -d demo-db -c topics --file ./topics.json

相关参数说明:

-h 连接的主机或者连接的主机及端口,host:port 格式,默认为本机,端口27017
-d 要导入的数据库 (db)
-c 要导入的集合(collection)
--file 要导入文件的路径

2.3 命令脚本

使用聚合(aggregate)实现相关需求

db.topics.aggregate([
{$match:{"_id":ObjectId("5c517240908400b9bd67261b")}},
{$project:{"comments":1,"_id":0}},
{$unwind:"$comments"},
{$sort:{"comments.publish_time":-1}},
{$skip:0},
{$limit:2}]).pretty();

结果如下:

1)第一页


第一页查询结果.png

2)第二页


第二页查询结果.png

相关说明:mongodb的聚合(aggregate)使用的是管道(pipeline)的模式,上一个阶段的处理的结果做为下一个阶段的输入,下面分别对相关阶段做以解释说明

  • {$match:{"_id":ObjectId("5c517240908400b9bd67261b")}}
    匹配主键为5c517240908400b9bd67261b的记录,数据导入时未设置主键,该主键默认由 mongodb自动生成,需先查询主文档获得
  • {$project:{"comments":1,"_id":0}}
    设置投影,只显示comments字段
  • {$unwind:"$comments"}
    comments字段结果集展开
  • {$sort:{"comments.publish_time":-1}}
    按发布时间倒序
  • {$skip:0}
    分页参数,第一页,第N页取值 (N-1) * 单页条数
  • {$limit:2}
    单页条数

4 结束语

以上为使用 MongoDB shell 的实现方式,后一篇准备使用原生 MongoDB 驱动和 spring-data-mongodb 实现分别进行以上内容的实现,敬请期待。

相关文章

  • MongoDB 4.0 子文档分页排序脚本实现(聚合方式)

    0 运行环境 MongoDB Community v4.0.5 mongoimport r4.0.5 MongoD...

  • 数据库查询语句

    条件与逻辑查询 模糊查询 范围查询 排序 聚合函数 分组 连接查询 分页 子查询

  • MongoDB 实用数组聚合操作 (3)

    前言 MongoDB 提供了 aggregate 聚合操作函数对多个文档进行筛选、排序、统计等操作,这些操作可以在...

  • Hibernate(03)

    OID检索方式: HQL\QBC和SQL的区别? 条件查找 排序 分页查询: HQL: QBC 或者 聚合函数co...

  • 2020-08-03(约束)

    1,dql:查询语句; 排序查询,聚合函数,分组查询,分页查询; a,排序; order by ,asc...

  • MongoDB查询结果排序 --- 2022-04-03

    本章介绍,MongoDB查询结果排序,类似MYSQL order by的用法,MongoDB的分页查询通过Curs...

  • MySQL查询语句

    目录 一、查询准备 二、条件查询 三、排序 四、聚合函数 五、分组 六、分页 七、连接查询 八、自关联 九、子查询...

  • 【Mongodb】事务

    概述 Mongodb 4.0 支持副本集的多文档事务 Mongodb 4.2 支持分片集群的多文档事务 单个Ser...

  • spring date mongo mongotemplate使

    Spring数据MongoDB三:基本文档查询(查询,基本查询)(一) MongoDB高级查询[聚合] sprin...

  • mongodb基础语句

    数据库 新增 删除 连接 集合 新增 查询 修改 删除 排序 分页 索引 聚合 备份

网友评论

      本文标题:MongoDB 4.0 子文档分页排序脚本实现(聚合方式)

      本文链接:https://www.haomeiwen.com/subject/spucsqtx.html