mongodb 基於crud(create,read,update,delete)方式實現了對集合上的文件進行增刪改查。對於集合上字段的增刪改,可以使用se關於mongodb文件更新可以參考:mongodb 文件更新t或者unset修改器來實現。也可以使用文件替換的方式來實現。本文主要描述集合上字段的增刪改,以及基於選項upsert的更新。
db.collection.update(
, //查詢或過濾條件
, //修改器(被修改鍵及內容)
//後面的3.2之後的語法引數基本相同
)其他的如updateone,updatemany等用法請參考:mongodb 文件更新
mongodb集合上所有的寫操作特性
原子性操作(單個文件級別原子性操作)
_id 字段無法修改,即無法使用乙個新的_id值來代替
由於更新導致文件尺寸超出預期分配的情形,會自動調整填充因子,重新分配空間
保留文件欄位的順序,但是更新或重新命名可能導致字段順序重新排序(_id總是文件第乙個字段)
//$set修改器最常用,等同於rdbms update的set子句
//演示重用的的示例集合資料請參考:mongodb 比較運算子
> db.persons
.find().limit(1).pretty()
, "country" : "usa",
"books" : [
"js",
"c++",
"extjs",
"mongodb"
],"blog" : ""
}>
> //使用$set修改器修改age欄位
> db.persons
.update(,})
writeresult()
> //使用$set修改器修改巢狀文件,使用成員.方式來實現
> db.persons
.update(,})
writeresult()
> //檢視修改後的結果
> db.persons
.find(,).pretty()
}
//如下,將country設定為陣列
> db.persons
.update(,})
writeresult()
> db.persons
.find(,)
//下面使用$set文件新增乙個add欄位,也可以使用$inc實現新增字段(見後面的描述)
> db.persons
.update(,})
writeresult()
> //檢視新增欄位add
> db.persons
.find(,)
//注,欄位的刪除方法為}
> db.persons
.update(,})
writeresult()
//驗證刪除後的結果add未顯示
> db.persons
.find(,)
//當使用$inc修改器時,當字段不存在時,會自動建立該欄位,如果存在,則在原有值的基礎上進行增加或者減少
//$inc主要是用於專門進行數字的增加或減少,因此$inc只能用於整型,長整形,或者雙精度浮點型的值
//$inc不支援字串,陣列以及其他非數字的值
//注,對於$inc的操作,$set也可以完成。$inc存在的理由是$inc更高效
//下面通過$inc新增salary欄位
> db.persons
.update(,})
writeresult()
> db.persons
.find(,).pretty()
//再次執行$inc
> db.persons
.update(,})
writeresult()
//查詢結果為在原有1000的基礎上增加2000,即為3000
> db.persons
.find(,).pretty()
//基於$inc的負值
> db.persons
.update(,})
writeresult()
//負值後的結果
> db.persons
.find(,).pretty()
//下面使用非數字來實現$inc,報錯如下
> db.persons
.update(,})
writeresult("}})
//有時候需要為文件增加最後的更新時間自動,可以使用$currentdate方式來實現
//下面為文件增加lastmodified時間戳字段
> db.persons.update(,,$currentdate: })
writeresult()
//檢視結果
> db.persons.find(,)
//再次更新
> db.persons.update(,,$currentdate: })
writeresult()
//再次檢視結果,時間戳自動被自動更新為最新的時間
> db.persons.find(,)
//下面使用$rename對文件字段重新命名
> db.persons
.update(,})
writeresult()
> db.persons
.find(,)
//對子文件字段進行重新命名
> db.persons
.update(,})
writeresult()
> db.persons
.find(,)
, "ename" : "robinson.cheng" }
//對整個集合上所有文件字段進行重新命名
> db.persons
.count()
12> db.persons
.update({},},)
writeresult() //此次修改為11條,因為前面以及修改過1條
// upsert相當於oracle的merge
into或者mysql中的replace
into
// upsert即是當集合中匹配到滿足條件的文件時,則更新文件,否則則是新增文件。前提是該選項的值為true,預設為flase。
>//下面的演示的是匹配到文件時的例子
> db.persons.update(,},)
writeresult() //此時提示有乙個匹配,有乙個被更新
> db.persons.find(,)
>//下面通過upsert方式來新增文件
> db.persons.find() //查詢thomas
> db.persons.update(,},)
writeresult()
> db.persons.find()
a、對於文件上資料的修改有多種方式(修改器),常用的為$set修改器以及$inc
b、$inc是一種高效的資料修改器,通常用於實現數值的增加或減少,僅支援資料型別。
c、對於文件欄位的增加,可以使用$set,$unset,$inc,$currentdate等方式
d、對於文件欄位的刪除,使用$unset方式來實現
e、upsert選項可以實現匹配的文件則更新,不匹配時則插入
MongoDB 文件字段增刪改
mongodb 基於crud create,read,update,delete 方式實現了對集合上的文件進行增刪改查。對於集合上字段的增刪改,可以使用set或者unset修改器來實現。也可以使用文件替換的方式來實現。本文主要描述集合上字段的增刪改,以及基於選項upsert的更新。a.語法描述 db...
MongoDB文件的增刪改操作
這一次,就通過mongodb shell介紹一下對文件的增刪改操作。通過 show dbs 可以看到所有的資料庫。然後我們通過 use blog 切換到blog資料庫來開始下面的演示。使用 db 命令顯示當前正在使用的資料庫。1 c mongodb bin mongo.exe 2 mongodb s...
mongodb增刪改查
1 mongodb插入資料 db.表名.insert 2 新增乙個欄位.table 代表表名 新增字段 content,字串型別。db.table.update 3 給指定範圍內的記錄新增字段 lt表示小於,lte表示小於等於,gt表大於,gte表示大於等於,timestamp是我表中的乙個時間戳字...