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

来源:互联网 发布:宝马五系轮毂数据 编辑:程序博客网 时间:2024/05/16 04:54

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

原创粉丝点击