mongodb增刪改查操作


Note:mongodb存儲的是文檔,且文檔是json格式的對象,所以增刪改查都必須是json格式對象。

注:mongodb常用庫和表操作,但mongodb在插入數據時,不需要先創建表。

 

show databases; #查看已有數據庫
use dataName; #選擇數據庫,如果不存在庫,則會自動創建。
show tables; # 查看已有的表
show collections # 同上,
db.createCollection('表名');#建表
db.表名.drop(); #刪除表

注:table在mongodb里叫collections

 

 

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}})

#great than 大於
$gt ---> >
db.user.find({age:{$gt:20}})

#great than equal 大於等於
$gte ---> >=
db.user.find({age:{$gte:25}})

#less than 小於
$lt ---> <=
db.user.find({age:{$lt:25}})

#less than equal 小於等於
$lte ---> <=
db.user.find({age:{$lte:25}})


#$in --> in
#查詢age為20和25的文檔
db.user.find({age:{$in:[20,25]}})

#$nin --> not in
#查詢age不為20和25的文檔
db.user.find({age:{$nin:[20,25]}})


#$or
語法: {$or:[v1,v2..]}
是指取出 field列是一個數組,且至少包含 v1,v2值
db.user.find({$or:[{age:{$gte:30}},{name:"Zhaos"}]})


#$and
語法: {$and:[{<operator-expression>},{<operator-expression>}..]}
是指取出 field列是一個數組,且至少包含 v1,v2值
db.user.find({$and:[{age:{$lte:30}},{age:{$gte:5}}]})


#$not
語法:{field:{$not:{ <operator-expression> }}}
是指取出 field列是一個數組,且至少包含 v1,v2值
db.user.find({age:{$not:{$gt: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}})

$mod
語法: {field:{$mod:[ divisor(除數), remainder(余數)]}}
作用: 查詢出含有mod字段的文檔
#查詢含有age列的文檔
db.user.find({_id:{$mod:[5,0]}})


$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})

$where
#查詢age>6,且age<22的文檔
db.user.find({$where:"this.age>6" && "this.age<=22"})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM