mongodb——curd

好了,這篇博客就是正式講crud操作啦。我會儘可能的講的簡單一點,然後本篇博客也只會講一些簡單常用的操作。

mongo插入

讓我們先從插入命令開始。
mongodb的插入命令通用格式如下:

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

document or array of documents:要插入的文檔內容,bson結構
ordered:操作是否有序(有序:在操作發生錯誤時不執行下面的操作;無序:繼續執行)
writeConcern:mongo的寫策略

其他的插入api:
insertOne()
insertMany()
其含義也顧名思義,是指定插入bson數量的。insertOne插入一個bson,insertMany是插入一個bson數組的方法。

示例:

db.test.insert({
    "name":"tom",
    "age":13,
    "like":"apple"
})

db.test.insertOne({
    "name":"tom",
    "age":13,
    "like":"apple"
})

db.test.insertMany([{
    "name":"tom",
    "age":13,
    "like":"apple"
},
{
    "name":"jack",
    "age":14,
    "like":"pear"
}])

**注:**如果執行過上面幾句示例的話,大家應該能夠發現我們在成功插入後顯示的結果是不一樣的。在insert執行後,顯示的是:
WriteResult({ "nInserted" : 1 })
而在執行insertOne和insertMany執行完顯示的是
{"acknowledged" : true,"insertedId" : ObjectId("5d11c1ce4a715b97743cfabd")}
關於這個返回的我們先不在這裏詳細說啦,將在之後的博客裏詳細講解~~

第二種插入文檔的方法是save

db.collection.save(    
	<document>,     
	{      
		writeConcern: <document> 
	}  
)  

與insert的異同如下:
區別:當_id在document存在時,如果_id與數據庫中已有的值重複,insert會報錯;save是根據_id找數據庫的數據,有的話則會替換數據庫裏面的數據;沒有則新增

相同點:新增的數據沒有主鍵時,都是插入一條數據

mongo查找(簡單版本)

就數據庫來說,我們平時用到最多的一定是查找(所以索引就顯得如此重要。。。)
這裏暫時先簡單介紹一下mongo的查詢(幾乎是用到最頻繁的語句),複雜的查詢操作將在之後的一篇博客中專門講述。

首先介紹一種最常用的查找方法:

db.collection.find(query, projection)

query:查詢條件(格式是bson,可以寫的很複雜)
projection(投影):格式也是bson,最後結果的展示方式。將在之後的博客裏詳細講解~~

最簡單的我們可以通過find方法來查詢集合裏面的全量數據
db.test.find()
執行結果:
{ "_id" : ObjectId("5d11c1544a715b97743cfaba"), "name" : "jack", "age" : 14, "like" : "pear" }
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "grape" }
屬性介紹:
_id:mongo自動爲我們生成的文檔主鍵(我們可以在插入文檔的時候顯示設置_id屬性,但是必須要保證唯一性)
其他屬性:我們自定義的文檔屬性

我們接下去根據不同的需求寫簡單的find表達式

  1. 查找名字爲jack的文檔,並顯示全部屬性
  2. 查找集合裏面所有的名字(不去重)
  3. 查找14歲的tom
  4. 查找13歲的tom和14歲的jack

表達式如下:

1.db.test.find({“name”:“jack”}): 使用query來指定查詢條件 where name=“jack”
{ "_id" : ObjectId("5d11c1544a715b97743cfaba"), "name" : "jack", "age" : 14, "like" : "pear" }
2.db.test.find({},{“name”:1,"_id":0): 不指定查詢條件,使用投影指定返回字段(0表示不返回,1表示返回) 此處有坑,不能亂用!!!
{ "name" : "jack" }
{ "name" : "tom" }
{ "name" : "tom" }
3.db.test.find({“name”:“tom”,“age”:14}): sql中的and查詢 where name=“tom” and age=14
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "grape" }
4.db.test.find({$or:[{“name”:“tom”,“age”:13},{“name”:“jack”}]}): or查詢 where (name=“tom” and age=13) or name=“jack”
{ "_id" : ObjectId("5d11c1544a715b97743cfaba"), "name" : "jack", "age" : 14, "like" : "pear" }
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }

其他的查詢api:
findOne():只會返回查詢結果中的第一條數據

mongo刪除

mongo裏面的刪除不是delete而是remove!!
其常用api如下:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

query:指定刪除文檔的查詢條件
queryOne:如果設置爲true或者1,則只刪除一個文檔;如果不設置或者設置false,則刪除匹配出來的所有文檔。默認爲false
writeConcern:mongo的寫策略

示例:
刪除jack的文檔
db.test.remove({“name”:“jack”})
WriteResult({ "nRemoved" : 1 }) 顯示已經刪除了一個文檔

其他api:
db.collection.deleteOne()
db.collection.deleteMany()

mongo更新

常用的更新api:

db.collection.update(    
	<query>, 
	<update>, 
	{       
		upsert: <boolean>,   
		multi: <boolean>,  
		writeConcern: <document>
	}
)

query : update的查詢條件,類似sql update查詢內where後面的。
update : update的對象和一些更新的操作符(如,,inc…)等,也可以理解爲sql update查詢內set後面的
upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。
multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數爲true,就把按條件查出來多條記錄全部更新。
writeConcern :mongo寫策略。

**注意:**mongo的update的機制是先使用query查詢出要更新的文檔,然後再用update的數據完全覆蓋查詢出來的文檔,並不是單個字段更新!!! 若要更新指定的字段,則需要用到$set標記,這種特殊符號我們將會在之後講解。

目前數據庫中的記錄爲
db.test.find()
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "grape" }
我們現在把14歲tom的like也改成apple:
db.test.update({“name”:“tom”,“age”:14},{“name”:“tom”,“age”:14,“like”:“apple”})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 表示已經修改了一條。我們再查看一下
db.test.find()
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "apple" }

其他api:
db.collection.updateOne():替換第一個查詢出來的文檔
db.collection.updateMany():替換所有查詢出來的文檔
db.collection.replaceOne():只能替換整個文檔,update可以替換某一個字段

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章