MongoDB的find用法

0.查询符合条件数据的总条数 如:db.list名.find({条件}).count();

1.返回指定的键值:db.list.find({条件},{name:"任意值",age:任意值}); 结果就只会把 _id name age 三类键值返回,若不想要_id则需将_id:0显式的写到第二个键值集合中; 

2.指定键的值的范围返回指定的键值:db.list.find({age:{$gte:4,$lte:25}},{name:"任意值",age:任意值,_id:0}); 过滤出年龄>=4且<=小于25的键值且只包含name age;

3.刨除指定键的某个值返回指定的键值:db.list.find({age:{$ne:14},{name:"1",age:2,_id:0}); 过滤掉年龄为14的那条记录且键值且只包含name age;

=======================================$in和$nin的过滤条件只能是数组==========================================

4.包含指定键的某些值返回指定的键值:db.list.find({age:{$in:[14,16], name:"a"},{name:"1",age:2,_id:0}); 结果仅剩name是a且年龄为14或16的记录且键值且只包含name age;

5.与4相反:db.list.find({age:{$nin:[14,16]},{name:"1",age:2,_id:0}); 结果过滤掉年龄为14和16的那些条记录且键值且只包含name age;

6.找出age大于16或者name为a或b的记录:db.list.find({$or:[{age:{$gte:16}},{name:{$in:["a","b"]}}],{name:"1",age:2,_id:0}); 

7.正则匹配name打字母为1的记录:db.list.find({name:"/a/b/n/",{name:"1",age:2,_id:0}); 结果仅仅保留name开头字母为a,b,c的记录且键值且只包含name age;

8.$not操作为原条件取反;

=======================================键所对应的值为数组类型的查询==========================================

9.查询list中一条数据的键所对应的值为数组类型时使用:db.list名.find({likes:{$all:["篮球","足球","排球"]}},{name:"1",age:2,_id:0});就可以匹配查询;

10.键所对应的值为数组类型时使用该数组的具体索引位置进行查询  如:db.list名.find({"likes.1":"篮球"});会过滤出likes索引为1的位置为"篮球"的记录且"likes.2"引号必写;

11.根据前两条内容,查询出likes数组的元素个数是3的数据使用$size进行匹配 如:db.list名.find({likes:{$size:3}}); 即可;

12.根据9,10条内容查询出likes数组的元素索引为1到2进行匹配 如:db.list名.find({name:"xxx"},{likes:{$slice:[1,3]},_id:0}); 结果likes只展示likes2~3的值;

13.源于上条操作,如果只想展示likes数组中的最后一个元素则直接将$slice:-1即可;

=======================================键所对应的值为数组对象的查询==========================================

14.键所对应的值为数组类型且数组中仍是对象 则使用:db.list名.find(likes:{$elemMatch:{"likes1":"1","likes1":"2"}});它会匹配出"likes1":"1"并且"likes1":"2"的结果;

=============================================分页查询=============================================

15.分页查询 如:db.list名.find({age:{$gt:30}},{_id:0,name:1}).limit(5).sort({age:1});这样就找到了符合条件的前5条数据并升序排列,并且仅展示name键值;

16.分页查询 如:db.list名.find({age:{$gt:30}},{_id:0,name:1}).limit(5).skip(6).sort({age:-1});这样就找到了符合条件的7~12条数据并降序排列,并且仅展示name键值;

17.当数据量较大的时候skip有性能问题,处理办法就是使用日期记录上次查询出最后一条记录的时间,然后使用limit(..)找到大于该时间的几条即可;

 

  

posted @ 2015-02-08 07:22  soft.push("zzq")  Views(1300)  Comments(0Edit  收藏  举报