標籤:os io 使用 ar for 資料 cti sp on
插入文檔(插入資料庫)
db.person.insert({_id:"0001",name"yuexin"})
清除資料
db.person.drop()
批量插入文檔
shell中不支援批量插入
完成批量插入使用for迴圈
for(var i=0;i<10;i++){
.. db.persons.insert({_id:i,name:"yuexin"+i})
.. }
save操作
save操作與insert操作的區別是當id一樣的時候save會變成更新操作而insert會報錯
刪除列表中所有資料
db.persons.remove()刪除persons中的資料但是不刪除索引(db.system.indexes.find()中有值)
對於
db.person.drop()會刪除索引
刪除帶查詢條件的
db.persons.remove({_id:"3"})
如果想清除一個資料量十分龐大的集合,直接刪除該集合并且重建立立索引的辦法要比直接用remove的效率高很多。
1.強硬的文檔替換式更新操作
update更新
> db.persons.update({age:55},{name:"000"})
2.主鍵衝突時時候會報錯並且停止更新操作
因為是強硬替換的文檔和已有文檔id衝突時時候會報錯
3.insertOrUpdate操作
目的:查詢器查詢出來資料就執行更新操作,查不出來就替換操作
做法:> db.persons.update({name:"0004"},{name:"1114"},true)
4.批次更新
> db.persons.update({name:"yuexin"},{$set:{name:"text"}},false,true)
預設情況當查詢器查出多條資料的時候預設就修改第一條資料。
db.[documentName].update({查詢器},{修改器},false,true)
修改器:
$set 用來指定一個鍵值對,如果存在就進行修改,不存在就進行添加
$inc 只是使用於數字類型,他可以為指定的鍵對應的數字類型的數值做加減操作。
> db.persons.update({age:20},{$inc:{age:-2}})
$unset 刪除指定的鍵
> db.persons.update({age:18},{$unset:{age:1}})
$push
1.如果指定的鍵是數組追加新的數值
> db.persons.insert({_id:0,name:0,book:[]})
> db.persons.find()
{ "_id" : 0, "name" : 0, "book" : [ ] }
> db.persons.update({name:0},{$push:{book:"abc"}})
> db.persons.find()
{ "_id" : 0, "book" : [ "abc" ], "name" : 0 }
> db.persons.update({name:0},{$push:{book:"abcd"}})
> db.persons.update({name:0},{$push:{book:"abcd"}})
> db.persons.find()
{ "_id" : 0, "book" : [ "abc", "abcd", "abcd" ], "name" : 0 }
2.如果指定的鍵不是數組,則中斷當前操作
Cannot apply $push/$pushAll modifier to non-array
3.如果不存在指定的鍵則建立數群組類型的鍵值對
> db.persons.update({name:0},{$push:{things:"abcd"}})
> db.persons.find()
{ "_id" : 0, "book" : [ "abc", "abcd", "abcd" ], "name" : 0, "things" : [ "abcd"
] }
$pushAll 與push相似,是批量加入數組資料
> db.persons.update({name:0},{$pushAll:{things:["abcd","01","02"]}})
> db.persons.find()
{ "_id" : 0, "book" : [ "abc", "abcd", "abcd" ], "name" : 0, "things" : [ "abcd"
, "abcd", "01", "02" ] }
$addToSet 目標數組存在此項則不操作,不存在此項則加進去
> db.persons.insert({_id:0,name:0,book:[]})
> db.persons.update({name:0},{$addToSet:{book:"abcd"}})
> db.persons.find()
{ "_id" : 0, "book" : [ "abcd" ], "name" : 0 }
> db.persons.update({name:0},{$addToSet:{book:"abcd"}})
> db.persons.find()
{ "_id" : 0, "book" : [ "abcd" ], "name" : 0 }
$pop 刪除第一個或者最後一個(-1為第一個,1為最後一個)
> db.persons.update({name:0},{$pop:{book:-1}})
$pull 刪除指定的一個
> db.persons.update({name:0},{$pull:{book:"01"}})
$pull 刪除多個
> db.persons.update({name:0},{$pullAll:{book:["01","02"]}})
$ 數組定位器,如果數組有多個數值我們只想對其中一部分進行操作我們就要用到定位器($)(??)
修改器是放在最外面的,查詢器是放在內層的
$addToSet與$each結合完成批量數組更新
有的話就不添加了
> db.persons.find()
{ "_id" : 0, "book" : [ "js" ], "name" : 0 }
> db.persons.update({_id:0},{$addToSet:{book:{$each:["js","db"]}}})
> db.persons.find()
{ "_id" : 0, "book" : [ "js", "db" ], "name" : 0 }
當document被建立的時候mongoDB為其分配記憶體和預留記憶體,當修改操作不超過預留記憶體的時候速度非常快,反而超過了就要分配新的記憶體則會消耗時間
runCommand可以執行mongoDB中的特殊函數
findAndModify就是特殊函數之一他的用於是返回update或remove後的文檔
> db.persons.find()
{ "_id" : 0, "book" : [ "js", "db" ], "name" : 0 }
> ps = db.runCommand({
... "findAndModify":"persons",
... "query":{name:0},
... "update":{$set:{age:100}},
... new:true})
{
"lastErrorObject" : {
"updatedExisting" : true,
"n" : 1,
"connectionId" : 1,
"err" : null,
"ok" : 1
},
"value" : {
"_id" : 0,
"age" : 100,
"book" : [
"js",
"db"
],
"name" : 0
},
"ok" : 1
}
> ps.value
{ "_id" : 0, "age" : 100, "book" : [ "js", "db" ], "name" : 0 }
mongoDB學習(二)之常用的修改操作