mongo與關系型數據庫的概念對比,區分大小寫,_id為主鍵。
一、數據庫操作
>show dbs或者show databases #查看所有數據庫
>use dbname #創建和切換數據庫(如果dbname存在則切換到該數據庫,不存在則創建並切換到該數據庫;新創建的數據庫不會顯示,需要插入記錄才會顯示)
>db.dropDatabase() #刪除數據庫(需要先use進入到需要刪除的數據庫)
二、集合操作
>show collections或者show tables #查看集合(需要先use進入數據庫)
>db.createCollection(集合名字,參數) #創建集合
>db.集合名.drop() #刪除集合
三、文檔操作
在對文檔做操作時,文檔的字段名可以加引號,也可以不加引號。
1.插入文檔 db.集合名.insert(文檔)
如果集合在該數據庫中不存在會先創建集合;文檔為字典形式,可以是單個的字典,也可以是由字典組成的列表
>db.col.insert({ title: 'MongoDB教程', description: 'MongoDB是一個Nosql數據庫', by: '菜鳥教程', url: 'https://www.runoob.com/mongodb/mongodb-tutorial.html', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }) >db.col.insert({ title: 'MySQL教程', description: 'MySQL是一個sql數據庫', by: '菜鳥教程', url: 'https://www.runoob.com/mysql/mysql-tutorial.html', tags: ['MySQL', 'database', 'SQL'], likes: 200 })
插入文檔也可以使用db.集合名.save(document) 命令,如果不指定 _id字段save() 方法類似於insert() 。
2.查詢文檔
db.集合名.find(查詢條件,篩選列).pretty() ,查詢條件和篩選列都通過字典形式表達
查詢條件篩選行:多個條件and查詢:find({'k1':'v1','k2':'v2',...}),相當於關系型數據庫中的where k1=v1 and k2=v2 and ...
查詢條件篩選行:多個條件or查詢:find({ $or:[ {'k1':'v2'},{'k2':'v2'},...] }),相當於關系型數據庫中的where k1=v1 or k2=v2 or
刪選列:{'_id':0,'k1':1,'k2':1...},1表示返回0表示不返回,_id如果不指定為0默認表示返回,相當於關系型數據庫中的select field1,field2,... from
在指定的所有列中,除了_id其他所有的值要么都為1,表示指定列返回未指定列不返回,要么都為0表示指定列不返回其他列返回
限定返回結果的數量:limit(n),返回查詢結果的前n條
排序:sort({'key':1}),按照key字段排序,值為1則升序排,-1則降序排
find是以非結構化的形式顯示所有文檔,加上pretty()以結構化的形式顯示,對應的findOne方法返回第一個滿足條件的文檔
> db.col.find({'title':'MongoDB教程'}).pretty() { "_id" : ObjectId("5d2e94f240515ad8a4693240"), "title" : "MongoDB教程", "description" : "MongoDB是一個Nosql數據庫", "by" : "菜鳥教程", "url" : "https://www.runoob.com/mongodb/mongodb-tutorial.html", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
mongo也支持邏輯查詢,
例如
>db.col.find({'likes':{$gt:200,$lte:200}}).sort({'likes':1})
db.集合名.distinct(k)
獲取所有不重復的k字段的值
3.更新文檔
db.集合名.update(查詢條件,更新操作,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>})
- 更新操作:形式為{ $set:{key:value} }
- upsert : 可選,表示如果要update的記錄不存在是否將其插入為新記錄,默認是false不插入,true則插入。
- multi : 可選,表示是否更新所有滿足條件的記錄,默認是false只更新找到的第一條記錄,true則將滿足條件的所有記錄全部更新。
- writeConcern :可選,拋出異常的級別。
> db.col.update({by:'菜鳥教程'},{$set:{likes:500}},{upsert:true,multi:true}) WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
db.集合名.save(文檔)
如果不傳入_id,則該方法類似insert(),會插入一個文檔
如果傳入_id,則會對_id進行判斷,如果要save的記錄在原集合中存在,則按照內容對已存在的文檔進行更新,如果不存在則進行插入也類似insert()。
> db.col.save({ "_id" : ObjectId("5d2e960d40515ad8a4693241"), title: 'Python教程', description: 'Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言', by: '菜鳥教程', url: 'https://www.runoob.com/python3/python3-tutorial.html', tags: ['Python', '開發', '編程'], likes: 1000 }) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.col.save({ "_id" : ObjectId("5d2e960d40515ad8a4693250"), title: 'HTML', description: '是一種用於創建網頁的標准標記語言', by: '菜鳥教程', url: 'https://www.runoob.com/html/html-tutorial.html', tags: ['HTML', '前端', '編程'], likes: 300 }) WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0 })
4.刪除文檔 db.集合名.remove(query,justOne,writeConcern )
- query :(可選)刪除文檔的條件,用字典形式表示。
- justOne : (可選)如果設為 true 或 1,只刪除一個文檔,不設置該參數使用默認值 false,刪除所有匹配條件的文檔。
- writeConcern :(可選)拋出異常的級別。
>db.col.remove({by:'菜鳥教程'},1) WithResult({"nRemoved":1}) >db.col.remove({by:'菜鳥教程'}) WithResult({"nRemoved":2})
db.col.remove({})刪除所有文檔