1. 程式人生 > >mongodb的基本語法

mongodb的基本語法

 常用查詢:find({ }).fields({ }).skip(0).limit(200).sort({ }) 例如:find({'tc0316':'S1609220005063'}).fields({}).skip(0).limit(1000).sort({objdatetime:1}) 成功啟動MongoDB後,再開啟一個命令列視窗輸入mongo,就可以進行資料庫的一些操作。 輸入help可以看到基本操作命令: show dbs:顯示資料庫列表 show collections:顯示當前資料庫中的集合(類似關係資料庫中的表) show users:顯示使用者 use <db name>:切換當前資料庫,這和MS-SQL裡面的意思一樣 db.help():顯示資料庫操作命令,裡面有很多的命令 db.foo.help():顯示集合操作命令,同樣有很多的命令,foo指的是當前資料庫下,一個叫foo的集合,並非真正意義上的命令 db.foo.find():對於當前資料庫中的foo集合進行資料查詢(由於沒有條件,會列出所有資料) db.foo.find( { a : 1 } ):對於當前資料庫中的foo集合進行查詢,條件是資料中有一個屬性叫a,且a的值為1 MongoDB沒有建立資料庫的命令,但有類似的命令。 如:如果你想建立一個“myTest”的資料庫,先執行use myTest命令,之後就做一些操作(如:db.createCollection('user')),這樣就可以建立一個名叫“myTest”的資料庫。 資料庫常用命令 1、Help檢視命令提示 help db.help(); db.yourColl.help(); db.youColl.find().help(); rs.help(); 2、切換/建立資料庫 use yourDB; 當建立一個集合(table)的時候會自動建立當前資料庫 3、查詢所有資料庫 show dbs; 4、刪除當前使用資料庫 db.dropDatabase(); 5、從指定主機上克隆資料庫 db.cloneDatabase(“127.0.0.1”); 將指定機器上的資料庫的資料克隆到當前資料庫 6、從指定的機器上覆制指定資料庫資料到某個資料庫 db.copyDatabase("mydb", "temp", "127.0.0.1");將本機的mydb的資料複製到temp資料庫中 7、修復當前資料庫 db.repairDatabase(); 8、檢視當前使用的資料庫 db.getName(); db; db和getName方法是一樣的效果,都可以查詢當前使用的資料庫 9、顯示當前db狀態 db.stats(); 10、當前db版本 db.version(); 11、檢視當前db的連結機器地址 db.getMongo(); Collection聚集集合 1、建立一個聚集集合(table) db.createCollection(“collName”, {size: 20, capped: 5, max: 100}); 2、得到指定名稱的聚集集合(table) db.getCollection("account"); 3、得到當前db的所有聚集集合 db.getCollectionNames(); 4、顯示當前db所有聚集索引的狀態 db.printCollectionStats(); 使用者相關 1、新增一個使用者 db.addUser("name"); db.addUser("userName", "pwd123", true); 新增使用者、設定密碼、是否只讀 2、資料庫認證、安全模式 db.auth("userName", "123123"); 3、顯示當前所有使用者 show users; 4、刪除使用者 db.removeUser("userName"); 其他 1、查詢之前的錯誤資訊 db.getPrevError(); 2、清除錯誤記錄 db.resetError(); 檢視聚集集合基本資訊 1、檢視幫助 db.yourColl.help(); 2、查詢當前集合的資料條數 db.yourColl.count(); 3、檢視資料空間大小db.userInfo.dataSize(); 4、得到當前聚集集合所在的db db.userInfo.getDB(); 5、得到當前聚集的狀態db.userInfo.stats(); 6、得到聚集集合總大小db.userInfo.totalSize(); 7、聚集集合儲存空間大小db.userInfo.storageSize(); 8、Shard版本資訊 db.userInfo.getShardVersion() 9、聚集集合重新命名db.userInfo.renameCollection("users"); 將userInfo重新命名為users 10、刪除當前聚集集合db.userInfo.drop(); 聚集集合查詢 1、查詢所有記錄 db.userInfo.find(); 相當於:select* from userInfo; 預設每頁顯示20條記錄,當顯示不下的情況下,可以用it迭代命令查詢下一頁資料。注意:鍵入it命令不能帶“;” 但是你可以設定每頁顯示資料的大小,用DBQuery.shellBatchSize= 50;這樣每頁就顯示50條記錄了。 2、查詢去掉後的當前聚集集合中的某列的重複資料 db.userInfo.distinct("name"); 會過濾掉name中的相同資料 相當於:select distict name from userInfo; 3、查詢age = 22的記錄 db.userInfo.find({"age": 22}); 相當於: select * from userInfo where age = 22; 4、查詢age > 22的記錄 db.userInfo.find({age: {$gt: 22}}); 相當於:select * from userInfo where age >22; 5、查詢age < 22的記錄 db.userInfo.find({age: {$lt: 22}}); 相當於:select * from userInfo where age <22; 6、查詢age >= 25的記錄 db.userInfo.find({age: {$gte: 25}}); 相當於:select * from userInfo where age >= 25; 7、查詢age <= 25的記錄 db.userInfo.find({age: {$lte: 25}}); 8、查詢age >= 23 並且 age <= 26 db.userInfo.find({age: {$gte: 23, $lte: 26}}); 9、查詢name中包含 mongo的資料 db.userInfo.find({name: /mongo/}); //相當於%% select * from userInfo where name like ‘%mongo%’; 10、查詢name中以mongo開頭的 db.userInfo.find({name: /^mongo/}); select * from userInfo where name like ‘mongo%’; 11、查詢指定列name、age資料 db.userInfo.find({}, {name: 1, age: 1}); 相當於:select name, age from userInfo; 當然name也可以用true或false,當用ture的情況下河name:1效果一樣,如果用false就是排除name,顯示name以外的列資訊。 12、查詢指定列name、age資料, age > 25 db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1}); 相當於:select name, age from userInfo where age >25; 13、按照年齡排序 升序:db.userInfo.find().sort({age: 1}); 降序:db.userInfo.find().sort({age: -1}); 14、查詢name = zhangsan, age = 22的資料 db.userInfo.find({name: 'zhangsan', age: 22}); 相當於:select * from userInfo where name = ‘zhangsan’ and age = ‘22’; 15、查詢前5條資料 db.userInfo.find().limit(5); 相當於:selecttop 5 * from userInfo; 16、查詢10條以後的資料 db.userInfo.find().skip(10); 相當於:select * from userInfo where id not in ( selecttop 10 * from userInfo ); 17、查詢在5-10之間的資料 db.userInfo.find().limit(10).skip(5); 可用於分頁,limit是pageSize,skip是第幾頁*pageSize 18、or與 查詢 db.userInfo.find({$or: [{age: 22}, {age: 25}]}); 相當於:select * from userInfo where age = 22 or age = 25; 19、查詢第一條資料 db.userInfo.findOne(); 相當於:selecttop 1 * from userInfo; db.userInfo.find().limit(1); 20、查詢某個結果集的記錄條數 db.userInfo.find({age: {$gte: 25}}).count(); 相當於:select count(*) from userInfo where age >= 20; 如果要返回限制之後的記錄數量,要使用count(true)或者count(非0) db.users.find().skip(10).limit(5).count(true); 21、按照某列進行排序 db.userInfo.find({sex: {$exists: true}}).count(); 相當於:select count(sex) from userInfo; 索引 1、建立索引 db.userInfo.ensureIndex({name: 1}); db.userInfo.ensureIndex({name: 1, ts: -1}); 2、查詢當前聚集集合所有索引 db.userInfo.getIndexes(); 3、檢視總索引記錄大小 db.userInfo.totalIndexSize(); 4、讀取當前集合的所有index資訊 db.users.reIndex(); 5、刪除指定索引 db.users.dropIndex("name_1"); 6、刪除所有索引索引 db.users.dropIndexes(); 修改、新增、刪除集合資料 1、新增 db.users.save({name: ‘zhangsan’, age: 25, sex: true}); 新增的資料的資料列,沒有固定,根據新增的資料為準 2、修改 db.collection.update(criteria, objNew, upsert, multi ) criteria:update的查詢條件,類似sql update查詢內where後面的 objNew:update的物件和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的。 upsert : 如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。 multi : mongodb預設是false,只更新找到的第一條記錄,如果這個引數為true,就把按條件查出來多條記錄全部更新。 db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true); 相當於:update users set name = ‘changeName’ where age = 25; db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true); 相當於:update users set age = age + 50 where name = ‘Lisi’; db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true); 相當於:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’; 3、刪除 db.users.remove({age: 132}); 4、查詢修改刪除 db.users.findAndModify({ query: {age: {$gte: 25}}, sort: {age:-1}, update: {$set: {name: 'a2'}, $inc: {age: 2}}, remove: true }); db.runCommand({ findandmodify : "users", query: {age: {$gte: 25}}, sort: {age:-1}, update: {$set: {name: 'a2'}, $inc: {age: 2}}, remove: true });