mongoDB學習(二)之常用的修改操作

來源:互聯網
上載者:User

標籤: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學習(二)之常用的修改操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.