MongoDb的分页查询,游标,存储过程

1、            查询条数。

源数据如下:

>db.product.find({$where:nameNotEntity});

{"_id" : ObjectId("57182150560ca68a25e2991c"),"id" : "1", "name" : null, "price" : 4}

{"_id" : ObjectId("57182150560ca68a25e2991e"),"id" : "3", "price" : 6 }

{ "_id" : ObjectId("571979394cdf1f6d55d21e99"),"id" : "4", "name" : "签字笔2", "price" : 5,"socp" : [ 1, 2, 3 ] }

{ "_id" : ObjectId("5729563ad4e95f820161c16c"),"id" : "2", "name" : "粉笔", "socp" : {"child" : 3 } }

a)       Count(),limit(),skip()与sort();

Count直接查询总条数

>db.product.find().count();

4

Limit(n) ,查询n条

>db.product.find().limit(2);

{"_id" : ObjectId("57182150560ca68a25e2991c"),"id" : "1", "name" : null, "price" : 4}

{"_id" : ObjectId("57182150560ca68a25e2991e"),"id" : "3", "price" : 6 }

>db.product.find().limit(2).count();

4

>db.product.find().limit(2).count(true);

2

skip(n),跳过起始第n条

>db.product.find().limit(2).skip(2).sort({id:1});

{"_id" : ObjectId("57182150560ca68a25e2991e"),"id" : "3", "price" : 6 }

{ "_id" : ObjectId("571979394cdf1f6d55d21e99"),"id" : "4", "name" : "签字笔2", "price" : 5,"socp" : [ 1, 2, 3 ] }

sort({字段:m}),按照某个字段排序,m为1,升序,-1为降序

>db.product.find().limit(4).sort({id:-1});

{"_id" : ObjectId("571979394cdf1f6d55d21e99"),"id" : "4", "name" : "签字笔2", "price" : 5,"socp" : [ 1, 2, 3 ] }

{"_id" : ObjectId("57182150560ca68a25e2991e"),"id" : "3", "price" : 6 }

{"_id" : ObjectId("5729563ad4e95f820161c16c"),"id" : "2", "name" : "粉笔", "socp" : {"child" : 3 } }

{ "_id" : ObjectId("57182150560ca68a25e2991c"),"id" : "1", "name" : null, "price" : 4}

b)       MongDB的排序规则

最小值<null <数字 < 字符串

< 对象/文档 < 数组 < 二进制数据 < 对象id

< 布尔类型 < 日期型< 时间戳 <正则表达式<最大值

 

c)       剔除重复

语法语法:db.runCommand({“distinct”:集合名,“key”:”获得不重复数据的字段”});

d)       S

e)        

 

 

2、            分页等查询

数据量不大的时候,可以使用Count(),limit(),skip()与sort();组合使用。但是,skip是一条一条的跳到指定索引点才开始进行匹配数据,性能是极其低下的。所以当数据量大的时候。不采用;

 

自定义id,根据id来分页;如,第一页到了id24的,使用,匹配id>24的,在limit(需要拿的条数);

 

3、            游标与存储过程

a)      游标

> varre=db.product.find();

>while(re.hasNext()){ printjson(re.next())}

{"_id" : ObjectId("57182150560ca68a25e2991c"), "id" : "1","name": null,"price" : 4}

{ "_id" : ObjectId("57182150560ca68a25e2991e"),"id" : "3", "price" : 6 }

{"_id" :ObjectId("571979394cdf1f6d55d21e99"),"id" : "4","name": "签字笔2",         "price" : 5,"socp": [1,2,3] }

{"_id" : ObjectId("5729563ad4e95f820161c16c"),"id": "2","name" : "粉笔",       "socp" : {"child" : 3  }}

     

> var re=db.product.find();

>re.forEach(function(obj){

...printjson(obj)

... })

{"_id": ObjectId("57182150560ca68a25e2991c"),         "id" : "1","name" :null,"price" : 4}

{ "_id" : ObjectId("57182150560ca68a25e2991e"),"id" : "3", "price" : 6 }

{"_id" :ObjectId("571979394cdf1f6d55d21e99"),"id" : "4","name": "签字笔2",         "price" : 5,"socp": [1,2,3] }

{"_id" : ObjectId("5729563ad4e95f820161c16c"),"id": "2","name" : "粉笔",       "socp" : {"child" : 3  }}

 

b)   存储过程,mongoDB的存储过程就是一个js的函数

       语法:定义好函数后,使用db.system.js.save({_id:名称,value:函数})保存;

然后,可以通过如下命令查看:db.system.js.find();通过db.eval(名称)命令调用:

> varmyDb=function(a,b){

return  a+b;

}

>db.system.js.save({"_id":"myDbSave",value:myDb});

WriteResult({"nMatched" : 0, "nUpserted" : 1, "nModified" : 0,"_id" : "myDbSave" })

>db.system.js.find();

{ "_id" : "myDbSave", "value" : function(a,b){ return  a+b; } }

>db.eval("myDbSave(10,2)");

12

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB中进行分页查询可以通过使用MongoDB分页插件来实现。首先,需要配置MongoDB的相关信息。在配置类中使用@Configuration注解标记,并使用@Autowired注解将MongoTemplate注入进来。然后,使用@Bean注解标记一个方法,返回MongoPageHelper实例,该实例需要传入MongoTemplate对象作为参数。这样就完成了MongoDB配置的准备工作。 接下来,需要使用正确的分页办法来实现分页查询。在MongoDB中,推荐的分页解决方案是先查询当前页的第一条数据,然后按顺序查询pageSize条数据。这样可以提高查询的效率。 如果你想使用开箱即用的分页能力,可以使用MongoDB分页插件。该插件为MongoDB提供了方便的分页功能。你可以在我的博客中找到如何使用Maven引入该插件的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MongoDB分页的Java实现和分页需求的思考](https://blog.csdn.net/weixin_34303897/article/details/86400025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mongo-page-helper:MongoDB分页插件](https://download.csdn.net/download/weixin_42098759/18715448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值