博客 / 詳情

返回

MongoDB 的文檔編輯操作

1. 創建實驗用的數據庫和集合

建立實驗用數據庫 student中 stuinfo集合

# use student
# db
# db.createCollection("'stuinfo")

image.png

2. 插入文檔

(1) 方法一使用 insert

db.stuinfo.insert({_id:001,name:'alice',age:18})

image.png

(2) 方法二使用 save

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

參數説明:

  • document:文檔數據。
  • writeConcern:可選,拋出異常的級別。
db.stuinfo.save({_id:001,name:'alice',age:18})

image.png

(3) 方法三 批量插入多個文檔

db.stuinfo.insert([
{_id:001,name:'alice',age:18},
{_id:002,name:'test',age:18}
])

image.png

查看集合數據 db.stuinfo.find()

image.png

(4) 可以先將文檔定義為一個變量,然後再進行插入

> s={_id:5,name:'jack',age:19}
> db.stuinfo.insert(s)

操作結果如下圖所示:

image.png

3. 更新文檔

(1) 使用 update 方法用於更新已存在的文檔。語法格式如下:

db.COLLECTION_NAME.update (<criteria>,<objNew>,upsert, multi, writeConcern)

參數説明:

  • criteria:update 的查詢條件,類似 sql update 查詢內 where 後面的條件。
  • objNew:update 的對象和一些更新的操作符(如$,$inc...)等,也可以理解為 sql update 查詢內 set 子句的內容
  • upsert:可選,如果不存在 update 的記錄,是否插入 objNew,true為插入,默認 false,不插入
  • multi:可選,mongodb 默認 false,即只更新找到的第一條記錄,如果這個參數為 true,就把按條件查出來多條記錄全部更新。
  • writeConcern:可選,拋出異常的級別。例如,通過update方法來更新上述文檔的姓名(name),將姓名(name)為"curry"的文檔更新為了"李四”,可以執行命令:
db.stuinfo.update({name:'curry'},{$set:{name:'rose'}})

通過 find() 查看修改是否成功,具體操作步驟如下所示:

image.png

以上語句只會修改第一條發現的文檔,如果要修改多條相同的文檔,則需要設置 multi 參數為 true。

db.stuinfo.insert([{_id:006,name:'nancy',age:19},{_id:007,name:'nancy',age:18}])
db.stuinfo.find()
db.stuinfo.update({name:'nancy'},{$set:{name:'cherry'}}, false, true)

操作結果如下圖所示:

image.png
image.png

(2) 使用 save 方法通過傳入的文檔來替換已有文檔。語法格式如下:

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

參數説明:

  • document:文檔數據。
  • writeConcern:可選,拋出異常的級別。

例如,要替換”_id”為"2"的文檔的數據,可以執行下列命令:

db.stuinfo.save({_id:6,name:'miller',age:20})

操作步驟如下圖所示:

image.png

(3) 數據更新操作符

  • $set 操作符用來指定一個鍵的值,如果這個字段不存在,則創建它。
    語法:{$set:{field:value}})
    作用:把文檔中某個 field 的值設為 value。
  • $inc 操作符用來增加或減少已有鍵的值,如果該鍵不存在則創建一個。
    語法:{$inc:{field:value}}
    作用:對一個數字類型的某個field增加value,只能用於整型、長整型或雙精度浮點型
    的值。
  • $unset 操作符用來刪除一個鍵。
    語法:{$unset:{field:1}}
    作用:刪除某個 field。

首先,創建一個實驗用的 col 集合,然後使用 JavaScript 腳本的循環語句依次插入9個文檔記錄。

db.createCollection("col")
for(var i=1;i<10;i++) db.col.insert({count:i,test2:false,test5:true})

image.png

  • 只更新第一條滿足count>1的文檔記錄,將其test2的值設為"OK"。

    db.col.update({"count":{$gt:1}}, {$set:{"test2": "Ok"}})

    image.png

  • 更新滿足count>3的文檔記錄,將其test2的值設為"OK"。

    db.col.update({"count":{$gt:3}}, {$set:{"test2": "Ok"}},false,true)

    image.png

  • 只更新第一條count>4的文檔記錄,將其test5的值設為"OK"。

    db.col.update({"count":{$gt:4}}, {$set:{"test5": "Ok"}},true,false)

    image.png

  • 更新全部滿足count>5的文檔記錄,將其test5的值設為"OK"。

    db.col.update({"count":{$gt:5}}, {$set:{"test5": "Ok"}},true,true)

    image.png

  • 更新全部滿足count>6的文檔記錄,將其count的值+1。

    db.col.update({"count":{$gt:6}}, {$inc:{"count": 1}},false,true)

    image.png

  • 只更新第一條滿足count>6的文檔記錄,將其count的值+1。

    db.col.update({"count":{$gt:6}}, {$inc:{"count": 1}},false,false)

    image.png

  • 只更新第一條滿足count>6的文檔記錄,將其count 刪除。

    db.col.update({"count":{$gt:6}}, {$unset:{"count": 1}},false,false)

    image.png

4. 刪除文檔

(1) 刪除集合中的全部文檔

刪除指定集合的全部文檔:db.col.deleteMany({})db.col.remove({})

image.png
image.png

(2) 刪除指定條件的文檔

刪除集合 stuinfo 中 name = "cherry" 的全部文檔。

db.stuinfo.deleteMany({'name':'cherry'})

image.png

刪除滿足條件 age = 18 的第一個文檔

db.stuinfo.deleteOne({'age':18})

image.png

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.