首页 > 数据库 >golang+mongodb+Aggregate管道查询

golang+mongodb+Aggregate管道查询

时间:2022-08-19 11:33:07浏览次数:72  
标签:mongodb req 查询 golang limit skip Aggregate bson order

在go语言中使用mongodb管道创建视图并条件分页查询

使用bson.D{{}}包裹管道关键字条件

例如:

go语言中MongoDB配置qmngo

查询总页数:

bson.D{
{
"$count", "total_count",
},
},
分页查询:
skip为跳过几条数据
跳过条数=当前页-1乘每页数量(如每页20条数据,第一页数据为0-20条,第二页为21-40条)
limit为每页数据条数
skips := (req.Page.Offset - 1) * req.Page.Limit
bson.D{
{
"$skip", int(skips),
},
},
bson.D{
{
"$limit", int(req.Page.Limit),
},
},
//$count与$skip $limit不可一起使用

聚合查询(xxxDao这个表需要连接order、order_detail两个表查询,需要连表查询的根据业务真实情况增加减少bson.D{{需要连表信息}})
err:=dao.orderDao.Aggregate(ctx,qmngo.Pipeline{
bson.D{
{
"$lookup", bson.M{
"from": "order_detal",
"localField": "order_id",
"foreignField": "order_id",
"as": "order_docs",
},
},
},
//拆分
bson.D{
{
"$unwind", bson.M{
"path": "$order_docs",
"includeArrayIndex": "unwind_order_index",
"preserveNullAndEmptyArrays": true,
},
},
},
//需要查询出来的字段 最好命名月go里表单model里字段一致(根据业务而定,类似某语言的实例类)
bson.D{
{
"$project,bson.M{"order_id":"$order_docs.order_id","order_name":"$order_docs.order_name"},
},
},
//条件查询 如需要判断条件是否为空 可在查询外写一个bson.M{}过滤,query:=bson.M{条件} bson.D{{
"$match",query},},

bson.D{
  {
    "$match",bson.M{"user_id":req.userId},
  },
},
//排序需在分页前面
bson.D{
{
"$sort", bson.M{"upsert_time": -1},
},
},
//如查询总页数把 skip、limit换成count
bson.D{
{
"$skip", int(skips),
},
},
bson.D{
{
"$limit", int(req.Page.Limit),
},
},

}).All(&list)

 

标签:mongodb,req,查询,golang,limit,skip,Aggregate,bson,order
From: https://www.cnblogs.com/liuyuanchen/p/16601452.html

相关文章

  • MongoDB 单服务器创建用户并授权
    MongoDB单服务器创建用户并授权前言之前使用MongoDB时对于用户的认证和授权一直模模糊糊,各种教程看的半半拉拉,最后勉强能用。现在有时间了来总结一下。基础1.常见......
  • mongoDB学习笔记(正在完善中)
    打开mongoshellmongo添加超级管理员账户useadmin 切换到admin数据库db.createUser({user:'myadmin',pwd:'myadmin',roles:[{role:'userAdminAnyDatabase'......
  • redis-golang strings 操作
    本文来自于  github.com/go-redis/redis/v9的自带的测试代码commands_test1、Append(ctxcontext.Context,key,valuestring)//如果不存在key,就将keyval......
  • 解析PHP中常见的mongodb查询操作_PHP教程
    //栏位字串为$querys=array("name"=>"shian");//数值等于多少$querys=array("number"=>7);//数值大于多少$querys=array("number"=>array('$gt'=>5));//数值大......
  • mongodb 安装配置
    环境准备#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)vim/etc/security/limits.conf*softnproc655350*hardnproc655350*softnofile6......
  • 浮点数 mysql golang 时间序列
     1.6607259e+091660725877mysql>SELECTVal,CreateTs,CreateTsFROMTabWHEREDeviceId=156ANDOID=".1.3.6.1.4.1.28713.1.2.2.0" ANDCreateTs>=1660704714AN......
  • Golang打包windows、macos、linux下可执行文件
    windows.exe:#64bitGOOS=windowsGOARCH=amd64gobuild-obin/app-amd64.exeapp.go#32-bitGOOS=windowsGOARCH=386gobuild-obin/app-386.exeapp.goLinu......
  • 小白快速在cenos7系统搭建mongodb数据库及compass远程连接
    前言:本人的cenos系统是在腾讯云部署的云服务器,为个人网站提供服务,这里说明一下安装数据库遇到的问题和折腾记录。远程连接云服务器:这一步使用本地系统的可以跳过。之前......
  • golang
    Go与Java对比用途场景1.Java的用途用途一:服务器后端系统开发(web后端、微服务后端支付系统、业务系统、管理后台,各种后台交互的接口服务)。用途二:大数据框架的底层实现......
  • golang改进errGroup
    需求在并发控制中,想实现以下功能1、并发超时控制2、一个出错,主程序退出3、兼容errGroup然后对errGroup进行一次改写packageutilsimport( "context" "errors"......