Sequoiadb 測試體驗系列之三 – shell 控制檯再探

上一篇中嘗試了一下SequoiaDB的 shell控制檯的使用,研究了一下在控制檯中創建、刪除集合空間和集合,插入查找記錄等一系列基礎的操作,這一篇中來嘗試一下控制檯中匹配符、更新符和聚集符的應用。


進入控制檯

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. admin@sdbserver1:/opt/sequoiadb/bin/sdb  
  2. /opt/sequoiadb/.sequoiadb_shell_history  
  3. Welcome to SequoiaDB shell!  
  4. help() for help, Ctrl+c or quit to exit  


新建一個默認SequoiaDB實例,默認連接到11810端口,並賦給新建的變量db

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > db = new Sdb()  
  2. localhost:11810  
  3. Takes 0.3325s.  



查看現有的集合空間,有一個建好的名叫“foo”的集合空間
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > db.listCollectionSpaces()  
  2. {  
  3. "Name": "foo"  
  4. }  
  5. Return 1 row(s).  
  6. Takes 0.1714s.  



查看現有的集合,有一個建好的名叫“bar”的集合在集合空間“foo”中
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > db.listCollections()  
  2. {  
  3. "Name": "foo.bar"  
  4. }  
  5. Return 1 row(s).  
  6. Takes 0.1762s.  



將集合空間foo賦給變量cs
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cs = db.getCS("foo")  
  2. localhost:11810.foo  
  3. Takes 0.1688s.  



將集合空間bar賦給變量cl
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl = cs.getCL("bar")  
  2. localhost:11810.foo.bar  
  3. Takes 0.1205s.  



查看集合中的記錄,返回空
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. Return 0 row(s).  
  3. Takes 0.2083s.  


插入3條格式1的記錄

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > for(vari=0;i<3;i++){cl.insert({"a":i,"b":i})}  
  2. Takes 0.7291s.  

插入3條格式1的記錄

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > for(vari=3;i<6;i++){cl.insert({"a":i,"c":i})}  
  2. Takes 0.2165s.  


>查看集合中的記錄,返回剛剛插入的兩種格式的6條記錄
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. {  
  3. "_id": {  
  4. "$oid":"53c36441d0d8286f2000001b"  
  5. },  
  6. "a": 0,  
  7. "b": 0  
  8. }  
  9. {  
  10. "_id": {  
  11. "$oid":"53c36441d0d8286f2000001c"  
  12. },  
  13. "a": 1,  
  14. "b": 1  
  15. }  
  16. {  
  17. "_id": {  
  18. "$oid":"53c36441d0d8286f2000001d"  
  19. },  
  20. "a": 2,  
  21. "b": 2  
  22. }  
  23. {  
  24. "_id": {  
  25. "$oid":"53c36453d0d8286f2000001e"  
  26. },  
  27. "a": 3,  
  28. "c": 3  
  29. }  
  30. {  
  31. "_id": {  
  32. "$oid":"53c36453d0d8286f2000001f"  
  33. },  
  34. "a": 4,  
  35. "c": 4  
  36. }  
  37. {  
  38. "_id": {  
  39. "$oid":"53c36453d0d8286f20000020"  
  40. },  
  41. "a": 5,  
  42. "c": 5  
  43. }  
  44. Return 6 row(s).  
  45. Takes 0.6080s.  


利用$exists匹配符,刪除所有格式1(包含字段"b")的三條記錄

$exists匹配符,選擇集合中是否存在指定“<字段名>"的記錄。"0"表示選擇不存在指定"<字段名>"的記錄,"1"表示選擇存在指定"<字段名>"的記錄。

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.remove({b:{$exists:1}})  
  2. Takes 0.1776s.  


查看集合中的記錄,返回剩餘的三條格式2的記錄,格式1的三條記錄已經被刪除

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. {  
  3. "_id": {  
  4. "$oid":"53c36453d0d8286f2000001e"  
  5. },  
  6. "a": 3,  
  7. "c": 3  
  8. }  
  9. {  
  10. "_id": {  
  11. "$oid":"53c36453d0d8286f2000001f"  
  12. },  
  13. "a": 4,  
  14. "c": 4  
  15. }  
  16. {  
  17. "_id": {  
  18. "$oid":"53c36453d0d8286f20000020"  
  19. },  
  20. "a": 5,  
  21. "c": 5  
  22. }  
  23. Return 3 row(s).  
  24. Takes 0.4593s.  


重新插入3條格式1的記錄

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > for(vari=0;i<3;i++){cl.insert({"a":i,"b":i})}  
  2. Takes 0.2396s.  


確認記錄被插入

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. {  
  3. "_id": {  
  4. "$oid":"53c36441d0d8286f2000001b"  
  5. },  
  6. "a": 0,  
  7. "b": 0  
  8. }  
  9. {  
  10. "_id": {  
  11. "$oid":"53c36441d0d8286f2000001c"  
  12. },  
  13. "a": 1,  
  14. "b": 1  
  15. }  
  16. {  
  17. "_id": {  
  18. "$oid":"53c36441d0d8286f2000001d"  
  19. },  
  20. "a": 2,  
  21. "b": 2  
  22. }  
  23. {  
  24. "_id": {  
  25. "$oid":"53c36453d0d8286f2000001e"  
  26. },  
  27. "a": 3,  
  28. "c": 3  
  29. }  
  30. {  
  31. "_id": {  
  32. "$oid":"53c36453d0d8286f2000001f"  
  33. },  
  34. "a": 4,  
  35. "c": 4  
  36. }  
  37. {  
  38. "_id": {  
  39. "$oid":"53c36453d0d8286f20000020"  
  40. },  
  41. "a": 5,  
  42. "c": 5  
  43. }  
  44. Return 6 row(s).  
  45. Takes 0.6080s.  


使用$or匹配符,刪除所有格式1(包含字段"b")或者格式2(包含字段“c“)的記錄

$or 是邏輯”或“操作

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.remove({$or:[{b:{$exists:1}},{c:{$exists:1}}]})  
  2. Takes 0.1379s.  


查看記錄,所有的格式1或者格式2的記錄都已經被刪除

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. Return 0 row(s).  
  3. Takes 0.1247s.  


重新插入格式1和2的記錄各三條

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > for(vari=0;i<3;i++){cl.insert({"a":i,"b":i})}  
  2. Takes 0.2974s.  
  3. > for(vari=3;i<6;i++){cl.insert({"a":i,"c":i})}  
  4. Takes 0.2045s.  
  5. > cl.find()  
  6. {  
  7. "_id": {  
  8. "$oid":"53c36507d0d8286f20000024"  
  9. },  
  10. "a": 0,  
  11. "b": 0  
  12. }  
  13. {  
  14. "_id": {  
  15. "$oid":"53c36507d0d8286f20000025"  
  16. },  
  17. "a": 1,  
  18. "b": 1  
  19. }  
  20. {  
  21. "_id": {  
  22. "$oid":"53c36507d0d8286f20000026"  
  23. },  
  24. "a": 2,  
  25. "b": 2  
  26. }  
  27. {  
  28. "_id": {  
  29. "$oid":"53c3650ed0d8286f20000028"  
  30. },  
  31. "a": 4,  
  32. "c": 4  
  33. }  
  34. {  
  35. "_id": {  
  36. "$oid":"53c3650ed0d8286f20000029"  
  37. },  
  38. "a": 5,  
  39. "c": 5  
  40. }  
  41. {  
  42. "_id": {  
  43. "$oid":"53c3650ed0d8286f20000027"  
  44. },  
  45. "a": 3,  
  46. "c": 3  
  47. }  
  48. Return 6 row(s).  
  49. Takes 0.6644s.  



使用update方法和$inc更新符,和$gt, $exists匹配符,選擇字段"c"的值大於4的記錄,並將這些記錄字段"a"的值增加10

$inc操作是給指定“<字段名>”增加指定的“<值>”。

$gt選擇滿足“字段名”的值大於(>)指定“值”的記錄。

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.update({$inc:{a:10}},{c:{$gt:4,$exists:1}})  
  2. Takes 0.39929s.  


查看操作結果,字段"c"的值是"5"的記錄的字段"a”的值增加了10

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. {  
  3. "_id": {  
  4. "$oid":"53c36507d0d8286f20000024"  
  5. },  
  6. "a": 0,  
  7. "b": 0  
  8. }  
  9. {  
  10. "_id": {  
  11. "$oid":"53c36507d0d8286f20000025"  
  12. },  
  13. "a": 1,  
  14. "b": 1  
  15. }  
  16. {  
  17. "_id": {  
  18. "$oid":"53c36507d0d8286f20000026"  
  19. },  
  20. "a": 2,  
  21. "b": 2  
  22. }  
  23. {  
  24. "_id": {  
  25. "$oid":"53c3650ed0d8286f20000028"  
  26. },  
  27. "a": 4,  
  28. "c": 4  
  29. }  
  30. {  
  31. "_id": {  
  32. "$oid":"53c3650ed0d8286f20000029"  
  33. },  
  34. "a": 15,  
  35. "c": 5  
  36. }  
  37. {  
  38. "_id": {  
  39. "$oid":"53c3650ed0d8286f20000027"  
  40. },  
  41. "a": 3,  
  42. "c": 3  
  43. }  
  44. Return 6 row(s).  
  45. Takes 0.5286s.  



使用$unset更新符,將所有記錄中的字段"b"和"c"刪除

$unset操作是刪除集合中指定的字段名。如果記錄中沒有指定的字段名,跳過。

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.update({$unset:{b:"",c:""}})  
  2. Takes 0.1858s.  


查看記錄,所有的字段"b"和"c"都已經被刪除

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. {  
  3. "_id": {  
  4. "$oid":"53c36507d0d8286f20000024"  
  5. },  
  6. "a": 0  
  7. }  
  8. {  
  9. "_id": {  
  10. "$oid": "53c36507d0d8286f20000025"  
  11. },  
  12. "a": 1  
  13. }  
  14. {  
  15. "_id": {  
  16. "$oid":"53c36507d0d8286f20000026"  
  17. },  
  18. "a": 2  
  19. }  
  20. {  
  21. "_id": {  
  22. "$oid":"53c3650ed0d8286f20000028"  
  23. },  
  24. "a": 4  
  25. }  
  26. {  
  27. "_id": {  
  28. "$oid":"53c3650ed0d8286f20000029"  
  29. },  
  30. "a": 15  
  31. }  
  32. {  
  33. "_id": {  
  34. "$oid":"53c3650ed0d8286f20000027"  
  35. },  
  36. "a": 3  
  37. }  
  38. Return 6 row(s).  
  39. Takes 0.2611s.  


使用$lt匹配符,刪除所有包含字段"a"的值小於30的記錄

>$lt選擇滿足“字段名”的值小於(<)指定“值”的記錄。

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.remove({a:{$lt:30}})  
  2. Takes 0.1272s.  


查看記錄,所有的記錄都已經被刪除了

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.find()  
  2. Return 0 row(s).  
  3. Takes 0.1069s.  


插入5條格式3的記錄

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > for(vari=0;i<6;i++){cl.insert({"name":"name"+i,"age":10+i,"index":i})}  
  2. Takes 0.4366s.  
  3. > cl.find()  
  4. {  
  5. "_id": {  
  6. "$oid":"53c36708d0d8286f2000002a"  
  7. },  
  8. "name": "name0",  
  9. "age": 10,  
  10. "index": 0  
  11. }  
  12. {  
  13. "_id": {  
  14. "$oid":"53c36708d0d8286f2000002b"  
  15. },  
  16. "name": "name1",  
  17. "age": 11,  
  18. "index": 1  
  19. }  
  20. {  
  21. "_id": {  
  22. "$oid":"53c36708d0d8286f2000002c"  
  23. },  
  24. "name": "name2",  
  25. "age": 12,  
  26. "index": 2  
  27. }  
  28. {  
  29. "_id": {  
  30. "$oid":"53c36708d0d8286f2000002d"  
  31. },  
  32. "name": "name3",  
  33. "age": 13,  
  34. "index": 3  
  35. }  
  36. {  
  37. "_id": {  
  38. "$oid":"53c36708d0d8286f2000002e"  
  39. },  
  40. "name": "name4",  
  41. "age": 14,  
  42. "index": 4  
  43. }  
  44. {  
  45. "_id": {  
  46. "$oid":"53c36708d0d8286f2000002f"  
  47. },  
  48. "name": "name5",  
  49. "age": 15,  
  50. "index": 5  
  51. }  
  52. Return 6 row(s).  
  53. Takes 0.6854s.  



使用aggregate方法,聚集所有記錄並隱藏字段"index"

$project,選擇需要輸出的字段名,"1"表示輸出,"0"表示不輸出。

返回結果還是輸出了"index"字段,原因不清楚

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.aggregate({$project:{"index":0}})  
  2. {  
  3. "_id": {  
  4. "$oid":"53c36708d0d8286f2000002a"  
  5. },  
  6. "name": "name0",  
  7. "age": 10,  
  8. "index": 0  
  9. }  
  10. {  
  11. "_id": {  
  12. "$oid":"53c36708d0d8286f2000002b"  
  13. },  
  14. "name": "name1",  
  15. "age": 11,  
  16. "index": 1  
  17. }  
  18. {  
  19. "_id": {  
  20. "$oid":"53c36708d0d8286f2000002c"  
  21. },  
  22. "name": "name2",  
  23. "age": 12,  
  24. "index": 2  
  25. }  
  26. {  
  27. "_id": {  
  28. "$oid":"53c36708d0d8286f2000002d"  
  29. },  
  30. "name": "name3",  
  31. "age": 13,  
  32. "index": 3  
  33. }  
  34. {  
  35. "_id": {  
  36. "$oid":"53c36708d0d8286f2000002e"  
  37. },  
  38. "name": "name4",  
  39. "age": 14,  
  40. "index": 4  
  41. }  
  42. {  
  43. "_id": {  
  44. "$oid":"53c36708d0d8286f2000002f"  
  45. },  
  46. "name": "name5",  
  47. "age": 15,  
  48. "index": 5  
  49. }  
  50. Return 6 row(s).  
  51. Takes 0.7558s.  





使用aggregate方法,聚集所有記錄並,這次設置顯示"name",“age”字段,隱藏字段"index"

返回成功,"index"字段被隱藏了,可是還是很奇怪,爲什麼必須要設置顯示其他字段才能隱藏字段

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.aggregate({$project:{name:1,age:1,index:0}})  
  2. {  
  3. "name": "name0",  
  4. "age": 10  
  5. }  
  6. {  
  7. "name": "name1",  
  8. "age": 11  
  9. }  
  10. {  
  11. "name": "name2",  
  12. "age": 12  
  13. }  
  14. {  
  15. "name": "name3",  
  16. "age": 13  
  17. }  
  18. {  
  19. "name": "name4",  
  20. "age": 14  
  21. }  
  22. {  
  23. "name": "name5",  
  24. "age": 15  
  25. }  
  26. Return 6 row(s).  
  27. Takes 0.5398s.  


利用$project設置只顯示"name“字段,利用$limit將返回結果限制爲2條

$limit,限制返回的記錄條數。

返回結果正確

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.aggregate({$project:{name:1,age:0,index:0}},{$limit:2})  
  2. {  
  3. "name": "name0"  
  4. }  
  5. {  
  6. "name": "name1"  
  7. }  
  8. Return 2 row(s).  
  9. Takes 0.4870s.  





利用$project設置只顯示"name“字段,利用$limit將返回結果限制爲2條,利用$skip跳過前兩條記錄

$skip,控制結果集的開始點,即跳過結果集中指定條數的記錄。

返回結果正確,結果集中的兩條記錄被跳過,返回空

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.aggregate({$project:{name:1,age:0,index:0}},{$limit:2},{$skip:2})  
  2. Return 0 row(s).  
  3. Takes 0.1400s.  


利用$project設置只顯示"name“字段,利用$skip跳過前兩條記錄

返回結果正確,從第三條記錄開始顯示

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. > cl.aggregate({$project:{name:1,age:0,index:0}},{$skip:2})  
  2. {  
  3. "name": "name2"  
  4. }  
  5. {  
  6. "name": "name3"  
  7. }  
  8. {  
  9. "name": "name4"  
  10. }  
  11. {  
  12. "name": "name5"  
  13. }  
  14. Return 4 row(s).  
  15. Takes 0.3248s.  


清空集合中的記錄

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. >cl.remove()  
  2. Takes 0.1073s.  
  3. > cl.find()  
  4. Return 0 row(s).  
  5. Takes 0.1135s.  

至此,SequoiaDB的各種類型的有代表性的操作符都嘗試實現了一下,通過這次嘗試,也幫助我對JSON對象的語法格式有了一個大致的瞭解,對SequoiaDB也有了進一步的掌握,對NoSQL也有了更深一步的認識,希望其他對SequoiaDB感興趣的朋友和我聯繫,大家多多交流,共同進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章