MongoDB
MongoDB 是一個開源的文檔數(shù)據(jù)庫,并領(lǐng)先的 NoSQL 數(shù)據(jù)庫。 MongoDB 是由 c++語言編寫。
文檔
文檔是一組鍵 - 值對。文件動態(tài)模式。動態(tài)模式是指,在相同集合中的文檔不需要具有相同的字段或結(jié)構(gòu)組的公共字段的集合的文檔,可以容納不同類型的數(shù)據(jù)。
db.集合名稱.update({query},{update},upsert, multi})
query:過濾條件
update:修改內(nèi)容
upsert:如果不存在查詢條件查出的記錄,是否插入一條數(shù)據(jù),默認是false
multi:是否只修改查詢條件查出的第一條記錄,默認是false
> db.student.update({_id:1}, {name:"zhang"})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhang" }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }
把整條數(shù)據(jù)都修改了,如果修改內(nèi)容中沒有設(shè)置age字段,則以前的age也取消了,數(shù)據(jù)全部修改
局部修改
$set:如果存在鍵則修改,如果不存在鍵則添加
> db.student.update({_id: 1},{$set:{name:"zhangsan", age: 26}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }
id重復時無法修改
> db.student.update({_id:1},{_id:0, name:"zhangsanzhangsan"})WriteResult({"nMatched" : 0,"nUpserted" : 0,"nModified" : 0,"writeError" : {"code" : 16837,"errmsg" : "The _id field cannot be changed from {_id: 1.0} to {_id: 0.0}."}})> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }
第三個參數(shù)默認為false,如果查不到數(shù)據(jù)false時不執(zhí)行任何操作,true時往數(shù)據(jù)庫里新插入一條數(shù)據(jù)
> db.student.update({_id:7},{_id:7, name: "songjiu", age:32})WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })> db.student.update({_id:7},{_id:7, name: "songjiu"}, true)WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 7 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "age" : 32 }
第四個參數(shù)默認為false,false時表示只修改查詢到的第一條數(shù)據(jù),true時表示修改查詢到的所有數(shù)據(jù)
> db.student.update({age:32}, {$set:{age:33}}, false, false)WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 33 }{ "_id" : 7, "name" : "songjiu", "age" : 32 }> db.student.update({age:33}, {$set:{age:32}}, false, true)WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 32 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "age" : 32 }> db.student.update({age:32}, {$set:{age:33}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "age" : 32 }
$inc:在原來的基礎(chǔ)上加多少
> db.student.update({_id:7}, {$inc:{age:-1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "age" : 31 }
$unset:去掉某個鍵
> db.student.update({_id:7},{$unset:{age:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu" }
針對數(shù)組類型的操作
$push:當數(shù)據(jù)中不存在鍵時,創(chuàng)建數(shù)組類型的鍵并插入該值;如果存在該鍵,并且該鍵是數(shù)組類型時,則在此數(shù)組類型的數(shù)據(jù)上追加;如果存在該鍵,并且該鍵不是數(shù)組類型時,會報錯。
$pushAll:批量往數(shù)組中追加
$addToSet:數(shù)組中有該值時不追加,沒有該值時追加
> db.student.update({_id: 7},{$push:{skill:"java"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "java" ] }> db.student.update({_id: 7},{$push:{skill:"mongodb"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "java", "mongodb" ] }> db.student.update({_id: 7},{$push:{name:"111"}})WriteResult({"nMatched" : 0,"nUpserted" : 0,"nModified" : 0,"writeError" : {"code" : 16837,"errmsg" : "The field 'name' must be an array but is of type String in document {_id: 7.0}"}})> db.student.update({_id: 7},{$pushAll:{skill:["js","C++","java"]}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "java", "mongodb", "js", "C++", "java" ] }> db.student.update({_id:7},{$addToSet:{skill:"mongodb"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "java", "mongodb", "js", "C++", "java" ] }
$pop:刪除數(shù)組的第一個或最后一個元素,值為-1時是刪除第一個元素,值為1時是刪除最后一個元素。
$pull:刪除數(shù)組中的某一個指定的數(shù)值
$pullAll:刪除數(shù)組中多個指定的數(shù)值
> db.student.update({_id:7},{$pop:{skill:1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "java", "mongodb", "js", "C++" ] }> db.student.update({_id:7},{$pop:{skill:-1}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "mongodb", "js", "C++" ] }> db.student.update({_id:7},{$pull:{skill:"js"}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "mongodb", "C++" ] }> db.student.update({_id:7},{$pullAll:{skill:["js"]}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ "mongodb", "C++" ] }> db.student.update({_id:7},{$pullAll:{skill:["mongodb","C++"]}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.student.find(){ "_id" : 1, "name" : "zhangsan", "age" : 26 }{ "_id" : 2, "name" : "lisi", "age" : 27 }{ "_id" : 3, "name" : "wangwu", "age" : 30 }{ "_id" : 4, "name" : "zhaoliu", "age" : 28 }{ "_id" : 5, "name" : "qianliu", "age" : 33 }{ "_id" : 6, "name" : "sunba", "age" : 32 }{ "_id" : 7, "name" : "songjiu", "skill" : [ ] }
新聞熱點
疑難解答