Mongodb因為是最像關係型資料庫的非關係型資料庫,所以我們可以對照著mysql來認識Mongodb中的一些概念。
1、顯示庫列表:show dbs
2、使用庫:use dbname
注意:
1、該命令可隱式創建資料庫,即如果資料庫不存在則創建資料庫,否則切換到指定的資料庫。
2、如果show dbs沒有出現新創建的資料庫,則往裡面存入一條數據。如:
db.mydb.insert({name:"tom",age:18,gender:1,address:"北京",isDelete:0})
Name :集合名稱
Optinons:指定配置,如內存大小等
注意:使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用於降序排列。
Limit() 是要讀取幾條 相當於pageSize
Skip()是要跳過幾條 (currentpage-1)*pageSize
SELECT * FROM emp limit (currentpage-1)*pageSize,pageSize
db.collectionName.find({fieldName: /A/})
類似於sql:SELECT * FROM UserInfo WHERE userName LIKE "%A%"
db.collectionName.find({fieldName: /^A/})
類似於sql:SELECT * FROM UserInfo WHERE userName LIKE "A%"
還可以利用正則表達式進行模糊查詢:
db.collectionName.find({fieldName:{$regex:"runoob"}})
等價於
db.collectionName.find({fieldName:/runoob/})
注意:該命令可隱式創建表,即如果沒有該表則新建後插入該數據,如果該表存在,則往表裡插入該數據。
實例: db.collectionName.update({「_id」:1},{$set:{「stuName」:」李四」}})
注意:
①query : update的查詢條件,類似sql update查詢內where後面的。
②update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
③upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
④multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
12、刪除文檔 db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>})
注意:
①query :(可選)刪除的文檔的條件。
②justOne : (可選)如果設為 true 或 1,則只刪除一個文檔,如果不設置該參數,或使用默認值 false,則刪除所有匹配條件的文檔。
③writeConcern :(可選)拋出異常的級別。
1 >($gt) <($lt) >=($gte) <=($lte) 操作符
db.collectionName.find({field : {$gt : 100}}
db.t_user.find({「age」: {$lt : 18}}
等價於sql的
Select * from tablename where columnname > 100
2 使用 (<) 和 (>) 查詢 - $lt 和 $gt
db.collectionName.find({field : {$lt :200, $gt : 100}})
db.t_user.find({「age」: {$lt : 18,$gt:20}}
等價於sql的
Select * from tableName where columnName < 200 and colunmName > 100
聚合(aggregate)主要用於處理數據(諸如統計平均值,求和等),並返回計算後的數據結果。有點類似sql語句中的分組方法 group by
1 基本語法
db.collectionName.aggregate(AGGREGATE_OPERATION)
2 實例
db.collectionName.aggregate([{$group:{_id:"$field",」別名」:{$sum:1}}}])
Db.t_user.aggregate([{$group:{「sex」:"$field",num_tutorial:{$sum:1}}}])
等價於sql的
Select columnName,count(*) a count1 from tableName where age > 18 grop by columnName
3 聚合中常用的幾個操作
4 管道
聚合管道將MongoDB文檔在一個管道處理完畢後將結果傳遞給下一個管道處理。管道操作是可以重複的。
db.collectionName.aggregate( [
{ $match : { 「age」: { $gt : 18 } } },
{ $group: { _id: 「sex」, count: { $sum: 1 } } }
] );
$match用於獲取欄位中大於70小於或等於90記錄,然後將符合條件的記錄送到下一階段$group管道操作符進行處理。
類似於sql中的
Select column2,count(*) from tableName where age>18 group by column2
更多的語法可以參考: https://www.runoob.com/mongodb/mongodb-tutorial.html
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中的每個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,這對網站的性能是非常致命的。索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對資料庫表中一列或多列的值進行排序的一種結構
1 單欄位索引
db.collectionName.createIndex({field:options})
db.t_user.createIndex({age:1})
Field 是要創建索引的欄位 options =1是升序創建,-1是倒序創建
2 多欄位索引
db.collectionName.createIndex({"field1":1,"field2":-1})
1 索引數組欄位
db.collectionName.ensureIndex({"arrField":1})
arrField 是數組欄位
2 索引子文檔欄位
db.collectionName.ensureIndex({"fieldObj.field1":1,"fieldObj.field2":1,"fieldObj.field3":1})
fieldObj是mongodb中的對象欄位,field1,field2,field3是fieldObj中的子欄位
ensureIndex() = createIndex()
3.0版本前都用ensureIndex(),3.0之後就用的createIndex()
如何查看我的查詢欄位中是包含索引的?explain()
db.collectionName.find({field:"value"}).explain()