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