【MongoDB学习笔记七】MongoDB数据查询

 MongoDB和SQL查询语句对比

 查询的功能  SQL  MongoDB
 查询全部记录  select * from people

 db.people.find()

 查询age<=34的记录 select * from people where age <=34

db.people.find({"age":{$le:34}})

查询age=34的记录 select * from people where age =34

db.people.find({"age":34})

查询指定列(投影) select age,name from people db.people.find({},{"age":1, "name":1})
指定条件查询指定列(投影) select age,name from people where age = 34 db.people.find({"age":34},{"age":1, "name":1})
查询结果排序 select * from people order by name db.people.find().sort({"name":1})
模糊查询(正则表达式) select * from people where name like 'Jac*' db.people.find({"name":/^Jac/})
限制和跳过 select * from people limit 10 skip 20 db.people.find().limit(10).skip(20)
或查询 select * from people where age = 30 or name = 'Jack' db.people.find({$or:[{'age':30},{'name':'Jack}]})
Top 1 select * from people limit 1 db.people.findOne()
查询计划 explain select * from people where age <=34 db.people.find({"age":{$le:34}}).explain();
 记录总数  select(1) from people  db.people.find().count()
 记录总数 select count(age) from people  db.people.find({"age":{$exists:true}}).count();
多列去重查询  select distinct age from people

 db.person.distinct("age");

返回的是个整型数组

多列去重查询 select distinct age,name from people

TBD

find

db.people.find(第一个参数JSON,第二个参数JSON);  //第一个参数指定查询条件,第二个参数指定投影的列

投影查询

db.people.find({},{"age":0});//0表示此属性在查询结果中不出现,其它都出现
db.people.find({},{"age":1,"name":1}); //1表示此属性出现,这条查询表示name和age出现,其它不出现。实际上_id属性如果不指定,则默认表示出现
db.people.find({},{"age":0,"name":1}); //报错,0和1不能混合出现,You cannot currently mix including and excluding fields
db.people.find({},{"_id":0"age":1,"name":1});//name和age出现,_id不出现。_id是唯一一个可以和普通字段including和excluding混合出现的属性

MongoDB元算符

 

 

条件查询-1

db.people.find({"age":{$gt:27,$le:32}});//等价于SQL查询:select * from people where age > 27 and age <= 32 

 

条件查询-2

db.people.find({"age":{$not:{$in:[28,29,30,31]}}}) //查找年龄不在28和31之间的
 

条件查询-3

db.people.find({"age":{$mod:[5,1]}}); //查找age%5=1的

条件查询-4-正则表达式

db.people.find({"name":/^Clo/); //name以Clo开头的文档

条件查询-5-数组查询

db.people.find({"friends.name":"Jack"});//friends数组中的元素有个name属性

db.people.find({"friends.name":{$in:["Jack","Mike"]}}); //friends数组中的元素有个name属性包含Jack或者Mike

条件查询-6-数组长度查询

db.people.find({friends:{$size: 1}});  //查询friends数组长度为1的文档

 条件查询-7-$where

 $where条件查询可以自己定义查询的处理逻辑以人实现复杂的查询

db.people.find($where,function() { //找出年龄比朋友的年龄都大的文档
   var curItem = this;
   
   if (this.friends) {
   	if (this.age) {
          var friends = this.friends;
          for (var friend in friends) {
           if (friend.age) {
             if (friend.age > this.age) {
	     return false;
             }
           }
          }
         return true;
        }
       return false;
   }
  return false;
})

 

猜你喜欢

转载自bit1129.iteye.com/blog/2145215