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; })