mongodb增刪改查操作
Note:mongodb儲存的是文件,且文件是json格式的物件,所以增刪改查都必須是json格式物件。
1、增加資料,語法: db.collectionName.isnert(document)。
#不指定文件的id,資料庫會預設分配一個隨機id db.user.insert({name:'zhaos',age:23,sex:'f'}); #指定文件的id db.user.insert({_id:5,name:'zhaos',age:23,sex:'f'}); #增加單個文件 db.user.insert({_id:6,name:'zhaos',age:23,sex:'f'}); #增加多個文件 db.user.insert([{_id:2,name:'zhangs',age:21,sex:'m'},{_id:3,name:'wangw',age:22,sex:'m'},{_id:4,name:'zhaos',age:23,sex:'f'}]);
注意,這裡解釋下自動生成的id,MongoDB採用了一個ObjectId的型別來做主鍵,ObjectId是一個12位元組的 BSON 型別字串,按照位元組順序,依次代表:
4位元組:UNIX時間戳
3位元組:表示執行MongoDB的機器
2位元組:表示生成此_id的程序
3位元組:由一個隨機數開始的計數器生成的值
2、刪除資料,語法: db.collection.remove(查詢表示式, 選項)。選項是指需要刪除的文件數,{0/1},預設是0,刪除全部文件。
#將所有_id=7的文件刪除 db.user.remove({_id:7}) #將gender:'m'的所有文件刪除 db.user.remove({gender:'m'}) #只刪除一個gender:'m'的文件,num是指刪除的文件數 db.user.remove({gender:'m',1})
3、修改資料,語法: db.collection.update(查詢表示式,新值);
#從結果可以看出,這只是在替換一個文件,並非修改一個文件欄位
> db.user.update({name:'zhangs'},{name:'liul'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find();
{ "_id" : 2, "name" : "liul" }
#修改一個文件的欄位,必須使用$set:{屬性:'值'}
> db.user.update({name:'zhaos'},{$set:{name:'kongkong'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find();
{ "_id" : 6, "name" : "kongkong", "age" : 23, "sex" : "f" }
修改時的賦值表示式
$set 修改某列的值
db.user.update({name:'zhaos'},{$set:{name:'kongkong'}})
$unset 刪除某個列
eg:db.user.update({name:'kongkong'},{$unset:{name:'kongkong'}})
$rename 重新命名某個列
eg:db.user.update({_id:6},{$rename:{sex:'gender'}})
eg:db.user.update({},{$rename:{'sex':'gender'}},{multi:true})
$inc 增長某個列
eg:db.user.update({_id:6},{$inc:{age:2}})
$setOnInsert 當upsert為true時,並且發生了insert操作時,可以補充的欄位.
eq:db.user.update({_id:7},{$setOnInsert:{age:5,gender:'f'}},{upsert:true})
4、查詢資料,語法: db.collection.find(查詢表示式,查詢的列)。
#查詢一個表中的所有文件 db.user.find() #查詢特定屬性的文件 db.user.find({_id:3}) #查詢所有文件,顯示gender列,不顯示id db.user.find({},{gender:1,_id:0}) #查詢所有gender:'m'的文件,顯示gender列,age列,不顯示id db.user.find({gender:'m'},{gender:1,_id:0,age:1})
5、高階查詢知識點。
#not equal 不等於 $ne ---> != 查詢表示式 #查詢age不等於25的文件 db.user.find({age:{$ne:25}}) #$nin --> not in #查詢age為20和25的文件 db.user.find({age:{$nin:[20,25]}}) #$all 語法: {field:{$all:[v1,v2..]}} 是指取出 field列是一個數組,且至少包含 v1,v2值 db.user.find({age:{$all:[30]}}) $exists 語法: {field:{$exists:1}} 作用: 查詢出含有field欄位的文件 #查詢含有age列的文件 db.user.find({age:{$exists:1}}) $nor {$nor,[條件1,條件2]} 是指所有條件都不滿足的文件為真返回 #查詢所有age不為30,gender不為f的文件 db.user.find({$nor:[{age:30},{gender:'f'}]}) 正則表示式查詢 #查詢所有以name:yang開頭的文件 /patern/ db.user.find({name:/yang*/}) #查詢所有以name:zhao開頭的文件,且不區分大小寫 /patern/i db.user.find({name:/zhao/i})