查看聚集集合基本信息 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); 相當于:select top 5 * from userInfo; 16、 查詢10條以后的數據 db.userInfo.find().skip(10); 相當于:select * from userInfo where id not in ( select top 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(); 相當于:select top 1 * from userInfo; db.userInfo.find().limit(1); 20、 查詢某個結果集的記錄條數 db.userInfo.find({age: {$gte: 25}}).count(); 相當于:select count(*) from userInfo where age >= 20; 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.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 }); 參數 詳解 默認值 query 查詢過濾條件 {} sort 如果多個文檔符合查詢過濾條件,將以該參數指定的排列方式選擇出排在首位的對象,該對象將被操作 {} remove 若為true,被選中對象將在返回前被刪除 N/A update 一個 修改器對象 N/A new 若為true,將返回修改后的對象而不是原始對象。在刪除操作中,該參數被忽略。 false fields 參見Retrieving a Subset of Fields (1.5.0+) All fields upsert 創建新對象若查詢結果為空。 示例 (1.5.4+) false 語句塊操作 1、 簡單Hello World print("Hello World!"); 這種寫法調用了print函數,和直接寫入"Hello World!"的效果是一樣的; 2、 將一個對象轉換成json tojson(new Object()); tojson(new Object('a')); 3、 循環添加數據 > for (var i = 0; i < 30; i++) { ... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2}); ... }; 這樣就循環添加了30條數據,同樣也可以省略括號的寫法 > for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2}); 也是可以的,當你用db.users.find()查詢的時候,顯示多條數據而無法一頁顯示的情況下,可以用it查看下一頁的信息; 4、 find 游標查詢 >var cursor = db.users.find(); > while (cursor.hasNext()) { printjson(cursor.next()); } 這樣就查詢所有的users信息,同樣可以這樣寫 var cursor = db.users.find(); while (cursor.hasNext()) { printjson(cursor.next); } 同樣可以省略{}號 5、 forEach迭代循環 db.users.find().forEach(printjson); forEach中必須傳遞一個函數來處理每條迭代的數據信息 6、 將find游標當數組處理 var cursor = db.users.find(); cursor[4]; 取得下標索引為4的那條數據 既然可以當做數組處理,那么就可以獲得它的長度:cursor.length();或者cursor.count(); 那樣我們也可以用循環顯示數據 for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]); 7、 將find游標轉換成數組 > var arr = db.users.find().toArray(); > printjson(arr[2]); 用toArray方法將其轉換為數組 8、 定制我們自己的查詢結果 只顯示age <= 28的并且只顯示age這列數據 db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson); db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson); 排除age的列 db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson); 9、 forEach傳遞函數顯示信息 db.things.find({x:4}).forEach(function(x) {print(tojson(x));}); 上面介紹過forEach需要傳遞一個函數,函數會接受一個參數,就是當前循環的對象,然后在函數體重處理傳入的參數信息。 |
|