MongoDB集合的操作


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一個字段的數據。


免責聲明!

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



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