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;
})
本文详细对比了MongoDB和SQL查询语句的功能,包括查询全部记录、特定条件查询、结果排序、模糊查询、限制和跳过、多列去重查询及使用MongoDB元算符进行复杂查询的方法。
2957

被折叠的 条评论
为什么被折叠?



