MongoDB集合的操作
插入文檔
MongoDB的數據定義格式和JSON的數據定義格式是一樣的,但是在MongoDB中我們把他稱之為BSON。他的數據格式是非常豐富的,比如我們在Mysql中要聯系兩站表的關系我們會創建一個表,里面存放他們的關系。但是在MongoDB里面我們可以放在同一個文檔里面,我們定義一個數組類型的屬性,這個數組就可以存放他們之間的關系,只需要兩個而不是三個。
1 db.course.insert({ 2 "name" : "數學", 3 "type" : "major" 4 }) 5 6 向課程表里插入一條數據
一次性插入多條數據
1 db.student.insert([ 2 { 3 "stu_name" : "小明", 4 "stu_number" : "2013001", 5 "stu_sex" : "男", 6 "course" : [ 7 ObjectId("5bb82bb3627eb5e25bead053"), 8 ObjectId("5bb82c5f627eb5e25bead054"), 9 ObjectId("5bb82c5f627eb5e25bead055"), 10 ObjectId("5bb82c5f627eb5e25bead057"), 11 ObjectId("5bb82c5f627eb5e25bead058") 12 ], 13 }, 14 { 15 "stu_name" : "小紅", 16 "stu_number" : "2013002", 17 "stu_sex" : "女", 18 "course" : [ 19 ObjectId("5bb82bb3627eb5e25bead053"), 20 ObjectId("5bb82c5f627eb5e25bead054"), 21 ObjectId("5bb82c5f627eb5e25bead055"), 22 ObjectId("5bb82c5f627eb5e25bead056"), 23 ObjectId("5bb82c5f627eb5e25bead058") 24 ], 25 } 26 ])
就像JSON一樣。一次封裝多個數據我們就用數組包裹起來就可以了,我們直接在學生表里面關聯課程的信息,course就是我們學生所選的課程。
還有一種插入的方法:
1 db.student.save( 2 { 3 "stu_name" : "小峰", 4 "stu_number" : "2013009", 5 "stu_sex" : "男", 6 "course" : [ 7 ObjectId("5bb82bb3627eb5e25bead053"), 8 ObjectId("5bb82c5f627eb5e25bead054"), 9 ObjectId("5bb82c5f627eb5e25bead055"), 10 ObjectId("5bb82c5f627eb5e25bead057"), 11 ObjectId("5bb82c5f627eb5e25bead058") 12 ], 13 } 14 )
save也可以插入數據,如果save的數據在集合里面就直接替換更新,沒有這個數據的存在就新增加一條。
更新文檔
1 更新文檔 2 db.student.update({ 3 查詢的條件, 4 更新的語句, 5 附加的參數 6 })
附加的參數
查詢的條件有
and條件,挨着寫默認就是and
1 db.student.update( 2 { 3 "stu_name" : "小張", 4 "stu_number" : "2013003", 5 }, 6 { 7 $set : {"stu_name" : "小張二"} 8 } 9 )
or條件,要出現$or的關鍵字
1 db.student.update( 2 { 3 $or : [ 4 {"stu_name" : "小張二"}, 5 {"stu_number" : "2013003"} 6 ], 7 }, 8 { 9 $set : {"stu_name" : "小張"} 10 } 11 )
布爾運算符
1 $ne : 不等於 2 $not : 不匹配結果 3 $nor : 所有的條件都不匹配 4 $exists : 判斷元素是否存在
$inc
1 db.student.update( 2 { 3 "stu_number" : "2013001" 4 }, 5 { 6 $inc : {"mark" : 1}//自增1,為負數的時候就是減 7 } 8 );
大於一個數據或小於一個數
1 db.student.update( 2 { 3 "stu_number" : {$gte:"2013001",$lte:"2013002"} 4 }, 5 { 6 $inc : {"mark" : 1}//自增1,為負數的時候就是減 7 } 8 );
$exists
1 db.student.find( 2 { 3 "stu_number" : {$exists:true} 4 } 5 );
返回這個字段存在的所有記錄,當為false的時候結果就是相反;
刪除文檔
1 db.student.remove({ 2 條件 3 },屬性)
1 db.student.remove( 2 { 3 "_id":ObjectId("5bb83384627eb5e25bead061") 4 } 5 )
查詢文檔
$not
1 db.student.find(
2 { 3 'stu_number' : {$not : {$ne : "2013002"}} 4 } 5 ).pretty() 6 這種情況下也會返回沒有stu_number的字段,和$gt這些比較運算符是不同的,他們只會返回有的字段
$in,不在集合里面我們就用$nin
1 db.student.find(
2 { 3 'stu_number' : { $in : ["2013001","2013002"]} 4 } 5 ).pretty() 6 和Mysql的where in是一樣的效果,他會查出2013001和002的數據
模糊查詢
在mongoDB里面我們的模糊查詢是按照正則表達式來進行匹配的
1 db.student.find( 2 { 3 "stu_number":{$regex:/^2013/} 4 } 5 )
我們要查詢一個數組里面一個字段的值,我們用點進行連接
1 { 2 "userInfo" : { 3 "name" : "張三", 4 "age" : 28 5 } 6 } 7 我們要查詢name等於張三的信息 8 9 db.student.find({"userInfo.name":"張三"})
JavaScript查詢
1 db.student.find( 2 { 3 "$where" : "function () {return this.stu_number == '2013001'}" 4 } 5 )
排序
1 db.student.find().sort({"stu_number":-1}).pretty() 2 3 當為-1的時候是降序,1為升序
限制
1 db.student.find().sort({"stu_number":-1}).limit(5).pretty() 2 3 限制顯示5條數據
跳過
1 db.student.find().sort({"stu_number":-1}).limit(5).skip(2).pretty() 2 3 跳過前兩個並且顯示5條數據
我們所看到的限制、跳過和Mysql的limit一樣,限制就是第一個參數,跳過就是第二個參數偏移量。
查詢返回特定的字段
1 db.student.find({},{'stu_number':0,}).sort({"stu_number":-1}).limit(5).skip(2).pretty()
當我們stu_number為0的時候,返回除了stu_number以外的數據,如果為1只返回stu_number一個字段的數據。