zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

基于MySQL到MongoDB简易对照表的详解

mysqlMongoDB 详解 基于 简易 对照表
2023-06-13 09:15:00 时间
查询:
MySQL:
SELECT*FROMuser
Mongo:
db.user.find()
MySQL:
SELECT*FROMuserWHEREname="starlee"
Mongo:
db.user.find({‘name":"starlee"})
插入:
MySQL:
INSERTINOTuser(`name`,`age`)values("starlee",25)
Mongo:
db.user.insert({‘name":"starlee",‘age":25})
如果你想在MySQL里添加一个字段,你必须:
ALTERTABLEuser….
但在MongoDB里你只需要:
db.user.insert({‘name":"starlee",‘age":25,‘email":"starlee@starlee.com"})
删除:
MySQL:
DELETE*FROMuser
Mongo:
db.user.remove({})
MySQL:
DELETEFROMuserWHEREage<30
Mongo:
db.user.remove({‘age":{$lt:30}})
$gt:>;$gte:>=;$lt:<;$lte:<=;$ne:!=
更新:
MySQL:
UPDATEuserSET`age`=36WHERE`name`="starlee"
Mongo:
db.user.update({‘name":"starlee"},{$set:{‘age":36}})
MySQL:
UPDATEuserSET`age`=`age`+3WHERE`name`="starlee"
Mongo:
db.user.update({‘name":"starlee"},{$inc:{‘age":3}})
MySQL:
SELECTCOUNT(*)FROMuserWHERE`name`="starlee"
Mongo:
db.user.find({‘name":"starlee"}).count()
MySQL:
SELECT*FROMuserlimit10,20
Mongo:
db.user.find().skip(10).limit(20)
MySQL:
SELECT*FROMuserWHERE`age`IN(25,35,45)
Mongo:
db.user.find({‘age":{$in:[25,35,45]}})
MySQL:
SELECT*FROMuserORDERBYageDESC
Mongo:
db.user.find().sort({‘age":-1})
MySQL:
SELECTDISTINCT(name)FROMuserWHEREage>20
Mongo:
db.user.distinct(‘name",{‘age":{$lt:20}})
MySQL:
SELECTname,sum(marks)FROMuserGROUPBYname
Mongo:
db.user.group({
key:{‘name":true},
cond:{‘name":‘foo"},
reduce:function(obj,prev){prev.msum+=obj.marks;},
initial:{msum:0}
});
MySQL:
SELECTnameFROMuserWHEREage<20
Mongo:
db.user.find(‘this.age<20′,{name:1})
发现很多人在搜MongoDB循环插入数据,下面把MongoDB循环插入数据的方法添加在下面:
for(vari=0;i<100;i++)db.test.insert({uid:i,uname:"nosqlfan"+i});
上面一次性插入一百条数据,大概结构如下:
{“_id”:ObjectId(“4c876e519e86023a30dde6b8″),“uid”:55,“uname”:“nosqlfan55″}
{“_id”:ObjectId(“4c876e519e86023a30dde6b9″),“uid”:56,“uname”:“nosqlfan56″}
{“_id”:ObjectId(“4c876e519e86023a30dde6ba”),“uid”:57,“uname”:“nosqlfan57″}
{“_id”:ObjectId(“4c876e519e86023a30dde6bb”),“uid”:58,“uname”:“nosqlfan58″}
{“_id”:ObjectId(“4c876e519e86023a30dde6bc”),“uid”:59,“uname”:“nosqlfan59″}
{“_id”:ObjectId(“4c876e519e86023a30dde6bd”),“uid”:60,“uname”:“nosqlfan60″}
简易对照表
SQLStatement                                                 MongoQueryLanguageStatement
CREATETABLEUSERS(aNumber,bNumber)        implicit;canbedoneexplicitly
INSERTINTOUSERSVALUES(1,1)                            db.users.insert({a:1,b:1})
SELECTa,bFROMusers                                          db.users.find({},{a:1,b:1})
SELECT*FROMusers                                             db.users.find()
SELECT*FROMusersWHEREage=33                     db.users.find({age:33})
SELECTa,bFROMusersWHEREage=33                  db.users.find({age:33},{a:1,b:1})
SELECT*FROMusersWHEREage=33ORDERBYname               db.users.find({age:33}).sort({name:1})
SELECT*FROMusersWHEREage>33                    db.users.find({"age":{$gt:33}})})
SELECT*FROMusersWHEREage<33                    db.users.find({"age":{$lt:33}})})
SELECT*FROMusersWHEREnameLIKE"%Joe%"                                  db.users.find({name:/Joe/})
SELECT*FROMusersWHEREnameLIKE"Joe%"                              db.users.find({name:/^Joe/})
SELECT*FROMusersWHEREage>33ANDage<=40                                  db.users.find({"age":{$gt:33,$lte:40}})})
SELECT*FROMusersORDERBYnameDESC                                  db.users.find().sort({name:-1})
CREATEINDEXmyindexnameONusers(name)                                  db.users.ensureIndex({name:1})
CREATEINDEXmyindexnameONusers(name,tsDESC)                                  db.users.ensureIndex({name:1,ts:-1})
SELECT*FROMusersWHEREa=1andb="q"                                  db.users.find({a:1,b:"q"})
SELECT*FROMusersLIMIT10SKIP20                                  db.users.find().limit(10).skip(20)
SELECT*FROMusersWHEREa=1orb=2                         db.users.find({$or:[{a:1},{b:2}]})
SELECT*FROMusersLIMIT1                                         db.users.findOne()
EXPLAINSELECT*FROMusersWHEREz=3                                  db.users.find({z:3}).explain()
SELECTDISTINCTlast_nameFROMusers                                  db.users.distinct("last_name")
SELECTCOUNT(*y)FROMusers                                           db.users.count()
SELECTCOUNT(*y)FROMuserswhereAGE>30                            db.users.find({age:{"$gt":30}}).count()
SELECTCOUNT(AGE)fromusers                                      db.users.find({age:{"$exists":true}}).count()
UPDATEusersSETa=1WHEREb="q"                                  db.users.update({b:"q"},{$set:{a:1}},false,true)
UPDATEusersSETa=a+2WHEREb="q"                                  db.users.update({b:"q"},{$inc:{a:2}},false,true)
DELETEFROMusersWHEREz="abc"                                   db.users.remove({z:"abc"});
###################################################
一、操作符
操作符相信大家肯定都知道了,就是等于、大于、小于、不等于、大于等于、小于等于,但是在mongodb里不能直接使用这些操作符。在mongodb里的操作符是这样表示的:
(1)$gt>(大于)   
(2)$lt  <(小于)   
(3)$gte  >=(大于等于)
(4)$lt  <=(小于等于)  
(5)$ne  !=(不等于) 
(6)$in  in(包含)      
(7)$nin  notin(不包含)  
(8)$exists  exist(字段是否存在) 
(9)$inc  对一个数字字段field增加value
(10)$set  就是相当于sql的setfield=value
(11)$unset  就是删除字段  
(12)$push  把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去
(13)$pushAll  同$push,只是一次可以追加多个值到一个数组字段内
(14)$addToSet  增加一个值到数组内,而且只有当这个值不在数组内才增加。
(15)$pop  删除最后一个值:{$pop:{field:1}}删除第一个值:{$pop:{field:-1}}注意,只能删除一个值,也就是说只能用1或-1,而不能用2或-2来删除两条。mongodb1.1及以后的版本才可以用
(16)$pull  从数组field内删除一个等于value值
(17)$pullAll  同$pull,可以一次删除数组内的多个值
(18)$操作符  是他自己的意思,代表按条件找出的数组里面某项他自己。这个比较坳口,就不说了。
二、CURD增、改、读、删
增加
复制代码代码如下:

db.collection->insert({"name"=>"caleng","email"=>"admin#admin.com"});

是不是灰常简单呀,对就是这么简单,它没有字段的限制,你可以随意起名,并插入数据
复制代码代码如下:

db.collection.update({"count":{$gt:1}},{$set:{"test2":"OK"}});只更新了第一条大于1记录
db.collection.update({"count":{$gt:3}},{$set:{"test2":"OK"}},false,true);大于3的记录全更新了
db.collection.update({"count":{$gt:4}},{$set:{"test5":"OK"}},true,false);大于4的记录只加进去了第一条
db.collection.update({"count":{$gt:5}},{$set:{"test5":"OK"}},true,true);大于5的记录全加进去

查询
复制代码代码如下:
db.collection.find(array("name"=>"bailing"),array("email"=>"email@qq.com"))
db.collection.findOne(array("name"=>"bailing"),array("email""email@qq.com"))

大家可以看到查询我用了两种不同的写法,这是为什么,其实这跟做菜是一样的,放不同的调料,炒出的菜是不同的味道。下面给大家说一下,这两种调料的不同作用。
findOne()只返回一个文档对象,find()返回一个集合列表。
也就是说比如,我们只想查某一条特定数据的详细信息的话,我们就可以用findOne();
如果想查询某一组信息,比如说一个新闻列表的时候,我们就可以作用find();
那么我想大家这时一定会想到我想对这一个列表排序呢,noproblemmongodb会为您全心全意服务
复制代码代码如下:
db.collection.find().sort({age:1});//按照age正序排列
db.collection.find().sort({age:-1});//按照age倒序排列
db.collection.count();//得到数据总数
db.collection.limit(1);//取数据的开始位置
db.collection.skip(10);//取数据的结束位置
//这样我们就实现了一个取10条数据,并排序的操作。

删除
删除有两个操作remove()和drop()
复制代码代码如下:
db.collection.remove({"name","jerry"})//删除特定数据
db.collection.drop()//删除集合内的所有数据

distinct操作
复制代码代码如下:
db.user.distinct("name",{"age":{$lt:20}})

2.熟悉MongoDB的数据操作语句,类sql
数据库操作语法
mongo--path
db.AddUser(username,password)添加用户
db.auth(usrename,password)设置数据库连接验证
db.cloneDataBase(fromhost)从目标服务器克隆一个数据库
db.commandHelp(name)returnsthehelpforthecommand
db.copyDatabase(fromdb,todb,fromhost)复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址
db.createCollection(name,{size:3333,capped:333,max:88888})创建一个数据集,相当于一个表
db.currentOp()取消当前库的当前操作
db.dropDataBase()删除当前数据库
db.eval(func,args)runcodeserver-side
db.getCollection(cname)取得一个数据集合,同用法:db["cname"]ordb.cname
db.getCollenctionNames()取得所有数据集合的名称列表
db.getLastError()返回最后一个错误的提示消息
db.getLastErrorObj()返回最后一个错误的对象
db.getMongo()取得当前服务器的连接对象gettheserverconnectionobject
db.getMondo().setSlaveOk()allowthisconnectiontoreadfromthennonmastermembrofareplicapair
db.getName()返回当操作数据库的名称
db.getPrevError()返回上一个错误对象
db.getProfilingLevel()?什么等级
db.getReplicationInfo()?什么信息
db.getSisterDB(name)getthedbatthesameserverasthisonew
db.killOp()停止(杀死)在当前库的当前操作
db.printCollectionStats()返回当前库的数据集状态
db.printReplicationInfo()
db.printSlaveReplicationInfo()
db.printShardingStatus()返回当前数据库是否为共享数据库
db.removeUser(username)删除用户
db.repairDatabase()修复当前数据库
db.resetError()
db.runCommand(cmdObj)runadatabasecommand.ifcmdObjisastring,turnsitinto{cmdObj:1}
db.setProfilingLevel(level)0=off,1=slow,2=all
db.shutdownServer()关闭当前服务程序
db.version()返回当前程序的版本信息
数据集(表)操作语法
db.linlin.find({id:10})返回linlin数据集ID=10的数据集
db.linlin.find({id:10}).count()返回linlin数据集ID=10的数据总数
db.linlin.find({id:10}).limit(2)返回linlin数据集ID=10的数据集从第二条开始的数据集
db.linlin.find({id:10}).skip(8)返回linlin数据集ID=10的数据集从0到第八条的数据集
db.linlin.find({id:10}).limit(2).skip(8)返回linlin数据集ID=1=的数据集从第二条到第八条的数据
db.linlin.find({id:10}).sort()返回linlin数据集ID=10的排序数据集
db.linlin.findOne([query])返回符合条件的一条数据
db.linlin.getDB()返回此数据集所属的数据库名称
db.linlin.getIndexes()返回些数据集的索引信息
db.linlin.group({key:...,initial:...,reduce:...[,cond:...]})
db.linlin.mapReduce(mayFunction,reduceFunction,<optionalparams>)
db.linlin.remove(query)在数据集中删除一条数据
db.linlin.renameCollection(newName)重命名些数据集名称
db.linlin.save(obj)往数据集中插入一条数据
db.linlin.stats()返回此数据集的状态
db.linlin.storageSize()返回此数据集的存储大小
db.linlin.totalIndexSize()返回此数据集的索引文件大小
db.linlin.totalSize()返回些数据集的总大小
db.linlin.update(query,object[,upsert_bool])在此数据集中更新一条数据
db.linlin.validate()验证此数据集
db.linlin.getShardVersion()返回数据集共享版本号