Nosql之Mongodb 2 高级查询
高级查询find()1 查询所有记录 db.users.find() 2 查询name为apple的记录 db.users.find({“name”:”apple”}) 3 查询country为china,gender为1的记录 db.users.find({“country”:”china”,” gender”:1}) 限制结果集对应到标准sql,之前是select * from,现在需要的是select name from … 1 查询name为apple,并且结果只显示name db.users.find({“name”:”apple”},{“name”:true}) --------------------------------------------------------------------------------------------------------------------------- 注:后面这个参数{name:true}代表只显示name,如果有一个设置true,那么其他未设置的都是默认false,但是_id字段是默认true的,如果不想显示_id,可以这么写: db.users.find({“name”:”apple”},{“name”:true,” _id”:false}) --------------------------------------------------------------------------------------------------------------------------- 2 查询所有记录,并且结果只显示name和country db.users.find(null,“country”:true,“_id”:false}) findOne()顾名思义,只显示查询到的第一条记录,类似于select top 1 … db.users.findOne({“gender”:0}) limit()类似于sqlserver中的top db.users.find({“gender”:0}).limit(2); 条件操作符 <,<=,>,>=,!=$lt 小于 (less than) $lte 小于等于 (less than equals) $gt 大于 (greater than) $gte 大于等于 (greater than equals) $ne 不等于 (not equals) 查出age大于30的记录 db.users.find({“age”:{$gt:30}}) 查出age>=30 且 <=40的记录 db.users.find({“age”:{$gt:30,$lt:40}}) $exists用于判断字段是否存在,比如我们向users集合里面添加一条记录,只有name属性 db.users.insert({name:”testExists”}) 现在我们查出不存在age字段的记录 db.users.find({“age”:{$exists:false}}) 查出有age字段但没有gender字段的记录 db.users.find({“age”:{$exists:true},” gender”:{$exists:false}}) null值的处理需要注意的null与exists的区别 null指的是字段为空或者字段不存在 exists指的是字段是否存在 比较下面两条记录 {“name”:null,” age”:44} {“age”:45} 如果使用null查询 db.xxx.find({name:null}) 则会查出上面两条记录 但是我们只想找出存在name字段并且其为空的记录,可以这么查询 db.xxx.find({“name”:{$exists:true,$in:[null]}}); $mod取模,比如我们查询年龄取模10等于1的记录,应该是年龄为1,11,21,… db.users.find({“age”:{$mod:[10,1]}}) $in & $nin这个类似于标准sql的in与not in 查询age为23或者24的记录 db.users.find({“age”:{$in:[23,24]}}) 查询age不为23或者24的记录 db.users.find({“age”:{$nin:[23,24]}}) $not可以用在任何其他条件之上 db.users.find({$not:{“age”:{$gt:25}}}) $or查询年龄为32或者name为zhangsan的记录 db.users.find({$or:[{“name”:”zhangsan”},{“age”:32}]}) 数组操作假设我们有下面两个document ${“name”:”zhangsan”,” booksNumber”:[101,102,103]} ${“name”:”lisi”,“booksNumber”:[101,103]} $alldb.users.find({“booksNumber”:{$all:[101,102]}}); 那么就能查出第一条记录,它需要满足里面所有的条件 $size我们需要查询只有booksNumber里面只有两个的记录 db.users.find({“booksNumber”:{$size:2}}) count()查询总记录数 db.users.find().count() 注:如果我们使用了limit db.users.find().limit(3).count() 这里是取前三条记录,但是调用count()后还是显示总记录数,如果我们需要返回被限制后的记录数 db.users.find().limit(3).count(true)即可 sort()这也是个顾名思义的操作,排序: 1 代表升序 -1 代表降序 按名字进行升序排序 db.users.find().sort({name:1}) 先按名字升序,再按年龄降序 db.users.find().sort({name:1,age:-1}) distinct()查询年龄小于等于50所有的name并去除重复 db.users.distinct(“name”,{“age”:{$lte:50}}) skip()这一特性通常用于分页 跳过三条记录并取之后的三条记录 db.users.find().skip(3).limit(3) 查询内嵌文档比如要查询这么一条记录: { “books”:{“bookid”:100,“bookname”:”english”} } db.users.find({“books.bookid”:100}); 使用正则表达式使用正则表达式也是mongodb非常强大的特性 比如我们使用正则表达式对name进行过滤 db.users.find({“name”:/^[fc]{1}/}) $where可以使用javascript代码进行查询,这使得查询几乎能做任何事情 db.users.find({$where:function() { //this指遍历到的当前的document //根据return true or false来判断此document是否满足find的条件 if(this.name == “zhangsan”) { return true; } for(var prop in this) { if(this[prop] == “123”) { return true; } } return false; }}); 本文转自http://www.cnblogs.com/zhaoyang/archive/2012/01/10/2317664.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |