我的编程空间,编程开发者的网络收藏夹
学习永远不晚

表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数 - du

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数 - du

  上一篇笔记将开始定义的存储结构处理了一下,将FormItems数组中的表单项都拿到mongodb document的最外层,和以前的关系型数据类似,之不过好多列都是动态的,不固定,不过这并没有什么影响。结果就是方便我们更好的查询和统计;还有一点就是转换之后从服务器端返回客户端的对象也是如此,这样更加方便了获取每个表单项的值(例如渲染列表)。

  我们的好的应用场景都是分页加载,好多地方都需要知道总的条数。以前呢是弄了两个API:一个是获取查询结果;一个是获取条数。为了这样一个功能要多发送一个API觉得有点浪费,之后便上网查了一下,这个问题前辈门已经遇到过了并且解决了,这里只是记录一下。我找到了几种处理方式,下面一一介绍一下。

  第一种

//        $facet    New in version 3.4.
db.getCollection("FormInstace").aggregate([
  {
    $facet: {
        totalCount: [{ $match:{FormId:"507048044944691000"} },{ $count: "totalCount" }],
      results: [{ $match:{FormId:"507048044944691000"} }]
    }
  }
]);

  方案二

//    方案2:
async function getQuery() {
  let query = await db.collection.find({}).skip(5).limit(5); // returns last 5 items in db
  let countTotal = await query.count() // returns 10-- will not take `skip` or `limit` into consideration
  let countWithConstraints = await query.count(true) // returns 5 -- will take into consideration `skip` and `limit`
  return { query, countTotal } 
}

  等待截图……

  以上两个方案都来自于:https://stackoverflow.com/questions/21803290/get-a-count-of-total-documents-with-mongodb-when-using-limit

  方案三

//    方案3:
db.getCollection("FormInstace").aggregate([
    {
        $match: {
            "FormItems.key": { $ne: null }
        }
    },
    {
        $addFields: {
            FormValueObj: {
                $arrayToObject: {
                    $map: {
                        input: "$FormItems",
                        as: "field",
                        in: [ "$$field.key", "$$field.value" ]
                    }
                }
            }
        }
    },
    {
      $replaceRoot: { newRoot: { $mergeObjects: [ "$FormValueObj", "$$ROOT" ] } }
    },
    {
        $project: {
            FormItems:0,
            FormValueObj:0
        }
    },
    {
        $match:{FormId:"507048044944691000"}
    },
    { 
        $group: {
            _id: null,
            count: { $sum: 1 },
            results: { $push: "$$ROOT" }
        }     
    },
    {
        $project:{_id:0,count:1, results: { $slice: [ "$results", 20, 20 ] }}
    }
]);

  方案三参考的是:https://medium.com/@kheengz/mongodb-aggregation-paginated-results-and-a-total-count-using-d2e23a00f5d5 但是上面的连接中也包括了这种方式……不管怎么说达到了我们想要的结果,并且支持分页!!!就是时间还是有点长,以后看看还能不能优化,如果有哪位大神有更好的方式,请告知,在这里表示感谢……

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数 - du

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数 - du

上一篇笔记将开始定义的存储结构处理了一下,将FormItems数组中的表单项都拿到mongodb document的最外层,和以前的关系型数据类似,之不过好多列都是动态的,不固定,不过这并没有什么影响。结果就是方便我们更好的查询和统计;还有一点就是转换之后从服
表单生成器(Form Builder)之mongodb表单数据查询——返回分页数据和总条数 - du
2018-10-14

表单生成器(Form Builder)之mongodb表单数据查询——统计查询求和 - du

上一篇笔记仅是记录了一下简单的关联查询,根据笔记中的场景:将某一车辆关联的耗损记录全部放在了一个字段当中。不知道现在中有没有这种场景,我们的应用中没有类似的场景,可能我们更关注的是某车辆的总耗损金额和总营收金额、总里程数等,因此这篇笔记记录一下怎么得到这些数据
表单生成器(Form Builder)之mongodb表单数据查询——统计查询求和 - du
2017-04-28

表单生成器(Form Builder)之mongodb表单数据——整理数据 - du

在上篇笔记中,为车辆信息表、车辆耗损表以及车辆营收表插入了一些数据。之后便是查询了,重点也在查询……按照之前定好的数据结构,如果是查询mongodb document的最外层比较简单,但是我们的重点应该是FormItems表单项集合中的表单项,对他们进行查询、
表单生成器(Form Builder)之mongodb表单数据——整理数据 - du
2021-09-27

编程热搜

目录