查詢:
MySQL:
SELECT * FROM user
Mongo:
db.user.find()
MySQL:
SELECT * FROM user WHERE name = 'starlee'
Mongo:
db.user.find({‘name' : 'starlee'})
插入:
MySQL:
INSERT INOT user (`name`, `age`) values ('starlee',25)
Mongo:
db.user.insert({‘name' : 'starlee', ‘age' : 25})
如果你想在MySQL裡添加一個欄位,你必須:
ALTER TABLE user….
但在MongoDB裡你只需要:
db.user.insert({‘name' : 'starlee', ‘age' : 25, ‘email' : 'starlee@starlee.com'})
刪除:
MySQL:
DELETE * FROM user
Mongo:
db.user.remove({})
MySQL:
DELETE FROM user WHERE age < 30
Mongo:
db.user.remove({‘age' : {$lt : 30}})
$gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=
更新:
MySQL:
UPDATE user SET `age` = 36 WHERE `name` = 'starlee'
Mongo:
db.user.update({‘name' : 'starlee'}, {$set : {‘age' : 36}})
MySQL:
UPDATE user SET `age` = `age` + 3 WHERE `name` = 'starlee'
Mongo:
db.user.update({‘name' : 'starlee'}, {$inc : {‘age' : 3}})
MySQL:
SELECT COUNT(*) FROM user WHERE `name` = 'starlee'
Mongo:
db.user.find({‘name' : 'starlee'}).count()
MySQL:
SELECT * FROM user limit 10,20
Mongo:
db.user.find().skip(10).limit(20)
MySQL:
SELECT * FROM user WHERE `age` IN (25, 35,45)
Mongo:
db.user.find({‘age' : {$in : [25, 35, 45]}})
MySQL:
SELECT * FROM user ORDER BY age DESC
Mongo:
db.user.find().sort({‘age' : -1})
MySQL:
SELECT DISTINCT(name) FROM user WHERE age > 20
Mongo:
db.user.distinct(‘name', {‘age': {$lt : 20}})
MySQL:
SELECT name, sum(marks) FROM user GROUP BY name
Mongo:
db.user.group({
key : {‘name' : true},
cond: {‘name' : ‘foo'},
reduce: function(obj,prev) { prev.msum += obj.marks; },
initial: {msum : 0}
});
MySQL:
SELECT name FROM user WHERE age < 20
Mongo:
db.user.find(‘this.age < 20′, {name : 1})
發現很多人在搜MongoDB迴圈插入資料,下面把MongoDB迴圈插入資料的方法添加在下面:
for(var i=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″ }
簡易對照表
SQL Statement Mongo Query Language Statement
CREATE TABLE USERS (a Number, b Number) implicit; can be done explicitly
INSERT INTO USERS VALUES(1,1) db.users.insert({a:1,b:1})
SELECT a,b FROM users db.users.find({}, {a:1,b:1})
SELECT * FROM users db.users.find()
SELECT * FROM users WHERE age=33 db.users.find({age:33})
SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 ORDER BY name db.users.find({age:33}).sort({name:1})
SELECT * FROM users WHERE age>33 db.users.find({'age':{$gt:33}})})
SELECT * FROM users WHERE age<33 db.users.find({'age':{$lt:33}})})
SELECT * FROM users WHERE name LIKE "%Joe%" db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE "Joe%" db.users.find({name:/^Joe/})
SELECT * FROM users WHERE age>33 AND age<=40 db.users.find({'age':{$gt:33,$lte:40}})})
SELECT * FROM users ORDER BY name DESC db.users.find().sort({name:-1})
CREATE INDEX myindexname ON users(name) db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC) db.users.ensureIndex({name:1,ts:-1})
SELECT * FROM users WHERE a=1 and b='q' db.users.find({a:1,b:'q'})
SELECT * FROM users LIMIT 10 SKIP 20 db.users.find().limit(10).skip(20)
SELECT * FROM users WHERE a=1 or b=2 db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
SELECT * FROM users LIMIT 1 db.users.findOne()
EXPLAIN SELECT * FROM users WHERE z=3 db.users.find({z:3}).explain()
SELECT DISTINCT last_name FROM users db.users.distinct('last_name')
SELECT COUNT(*y) FROM users db.users.count()
SELECT COUNT(*y) FROM users where AGE > 30 db.users.find({age: {'$gt': 30}}).count()
SELECT COUNT(AGE) from users db.users.find({age: {'$exists': true}}).count()
UPDATE users SET a=1 WHERE b='q' db.users.update({b:'q'}, {$set:{a:1}}, false, true)
UPDATE users SET a=a+2 WHERE b='q' db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
DELETE FROM users WHERE z="abc" db.users.remove({z:'abc'});
###################################################
一、操作符
操作符相信大家肯定都知道了,就是等於、大於、小於、不等於、大於等於、小於等於,但是在mongodb裡不能直接使用這些操作符。在mongodb裡的操作符是這樣表示的:
(1) $gt > (大於)
(2) $lt < (小於)
(3) $gte >= (大於等於)
(4) $lt <= (小於等於)
(5) $ne != (不等於)
(6) $in in (包含)
(7) $nin not in (不包含)
(8) $exists exist (欄位是否存在)
(9) $inc 對一個數字欄位field增加value
(10) $set 就是相當於sql的set field = 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來刪除兩條。mongodb 1.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();
那麼我想大家這時一定會想到我想對這一個列表排序呢,no problem mongodb會為您全心全意服務 複製代碼 代碼如下: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) returns the help for the command
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) run code server-side
db.getCollection(cname) 取得一個資料集合,同用法:db['cname'] or db.cname
db.getCollenctionNames() 取得所有資料集合的名稱列表
db.getLastError() 返回最後一個錯誤的提示訊息
db.getLastErrorObj() 返回最後一個錯誤的對象
db.getMongo() 取得當前伺服器的連線物件get the server connection object
db.getMondo().setSlaveOk() allow this connection to read from then nonmaster membr of a replica pair
db.getName() 返回當操作資料庫的名稱
db.getPrevError() 返回上一個錯誤對象
db.getProfilingLevel() ?什麼等級
db.getReplicationInfo() ?什麼資訊
db.getSisterDB(name) get the db at the same server as this onew
db.killOp() 停止(殺死)在當前庫的當前操作
db.printCollectionStats() 返回當前庫的資料集狀態
db.printReplicationInfo()
db.printSlaveReplicationInfo()
db.printShardingStatus() 返回當前資料庫是否為共用資料庫
db.removeUser(username) 刪除使用者
db.repairDatabase() 修複當前資料庫
db.resetError()
db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into {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,<optional params>)
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() 返回資料集共用版本號碼