MongoDB

MongoDB

1. MongoDB之原生ORM

使用了不存在的對象即建立該對象 **不存在關係連接**python

不存在SQL語句nosqllinux

格式:
  [{
id:1
name:"蔡文姬"
age: 16
gender:"女"
},
{
id:1
name:"蔡文姬"
age: 16
sex:["女","girl","老阿姨"]
other:{
hobby:["男","boy","小哥哥"]
}
}]

 

1. 首先建立一個數據庫
use SS2Day4 穿件數據庫並使用該數據庫
db 顯示當前使用的數據庫
db.users  建立並使用Collection(表)

2. 增查改刪(insert find update remove)
插入:
db.users.insert({"name":"蔡文姬","age":16}) # 建議不要使用 不推薦使用

查詢:
db.users.find() #無條件查找:將該表(Collection)中全部的數據一次性返回
更新:
db.users.update({"name":"蔡文姬"},{$set:{"age":18}})# 建議不要使用 不推薦使用
刪除:
db.users.remove({"age":21}) # 建議不要使用 不推薦使用
       remove({"name":"DragonFire"}) : 條件刪除name等於"DragonFire"的全部Document

-------------------------------------------------------------------------------
table Collections
row Documents 數據條目
column Field 字段(key值)

2.MongoDB 數據類型

數據類型:

(1)Object  ID :Documents 自生成的 _id
   
   Object ID :Documents 自生成的 _id 而且 不支持轉換成JSON字符串
?:{"_id" : ObjectId("5bda5293c6c72e52ffc7e91e")}
ObjectId:"5bda5293c6c72e52ffc7e91e"
0-8字節是時間戳,
9-14字節的機器標識符,表示MongoDB實例所在機器的不一樣;
15-18字節的進程id,表示相同機器的不一樣MongoDB進程。
19-24字節是計數器
        #以上四種標識符拼湊成世界上惟一的ObjectID
#只要是支持MongoDB的語言,都會有一個或多個方法,對ObjectID進行轉換
#能夠獲得以上四種信息

#注意:這個類型是不能夠被JSON序列化的

(2)String: 字符串,必須是utf-8

(3)Boolean:布爾值,true 或者false (這裏有坑哦~在咱們大Python中 True False 首字母大寫)

(4)Integer:整數 (Int32 Int64 大家就知道有個Int就好了,通常咱們用Int32)

(5)Double:浮點數 (沒有float類型,全部小數都是Double)

(6)Arrays:數組或者列表,多個值存儲到一個鍵 (list哦,大Python中的List哦)

  {
       "_id" : ObjectId("5b163830993ddc4cd4918ead"),
       "name" : "LuffyCity",
       "teacher" : [
           "DragonFire",
           "WuSir2B",
           "Alex AGod"
      ]
  }

(7)Object:若是你學過Python的話,那麼這個概念特別好理解,就是Python中的字典,這個數據類型就是字典

  {
       "_id" : ObjectId("5b163915993ddc4cd4918eaf"),
       "name" : "LuffyCity",
       "course" : {
           "name" : "Python",
           "price" : 19800
      }
  }

(8)Null:空數據類型 , 一個特殊的概念,None Null

(9)Timestamp:時間戳

  {
       "_id" : ObjectId("5b163bbf993ddc4cd4918eb3"),
       "name" : "LuffyCity",
       "date" : 1528183743111
  }

(10)Date:存儲當前日期或時間unix時間格式 (咱們通常不用這個Date類型,時間戳能夠秒殺一切時間類型)

  {
       "_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),
       "name" : "LuffyCity",
       "date" : ISODate("2018-06-05T15:28:33.705+08:00")
  }

 

3. 增刪改查支持方式

insert:
db.users.insertMany([{"name":"王三"},{"name":"王舞"}])  # 插入多條
   db.user.insertOne({"name":"劉老師"})  # 插入一條

   
   
remove:
   #remove({}):無條件刪除數據,這裏要注意了,這是刪除全部數據,清空Collection
   db.users.deleteOne({"age":63})
   db.users.deleteMany({"age":30})

   
   
update:
  ({"條件"},{"關鍵字":{"修改內容"}})
   若是條件爲空,那麼將會修改Collection中全部的數據
   
updateOne({"age":19},{$set:{"name":"WSSB"}}):根據條件修改一條數據的內容,如出現多條,只修改最高前的數據
updateMany({"age":19},{$set:{"name":"pig_qi"}}):根據條件修改全部數據的內容,多條修改

把age等於19的全部數據中的name改成WSSB



find:
   沒有findMany
db.users.find({})
   
db.users.findOne({})  
   db.user.findOne({"name":"王舞"})
   #findOne()無條件查找一條數據,默認當前Collection中的第一條數據
   #一條數據轉爲 json格式

 

4. 數學比較符

$lt: <
$lte: <=
$gt: >
$gte: >=
$eq: ==
: : == or =  "name":"王舞" name=王舞

 

5. $

 "$"  update 加上關鍵字 變成了 修改器
   其實 "$" 字符 獨立出現也是有意義的 , 我起名叫作代指符

   存儲知足條件的數據下標索引位置(知足查詢條件一條數據下標索引)
db.users.updateOne({"other.name":"linux","name":"銀網吧"},{$set:{"other.$.score":19}})
  $定位不到第二層
弊端:[
[1,2,3],
[{k:{zk:zv}},{k2:v2},{k3:v3}],
[4,5,6],
]
深度查詢查詢速度慢(建議最大4層)

 

6. $關鍵字 查詢

$or : db.users.find({$or:[{age:18},{name:"銀網吧"}]})

$and : ,  (通常不用)

$in : db.users.find({age:{$in:[18,84,73]}})

$all : db.users.find({hobby:{$all:[1,2,3,4,5,6]}})
   查詢條件必須包含在列表裏([1,2,3]能夠,[2,3,4,5,7]不行)

 

7. $修改器 update

$set: 
   直接將字段的值設定爲value

$unset:
   刪除字段(用來刪除Key(field)的)

$inc:
   將查詢到的結果 加上某一個值 而後保存
   原值增長 db.users.updateMany({name:"金王吧"},{$inc: {cursors: 1}})
   db.users.updateMany({name:"金王吧"},{$inc: {cursors: -10}})

 

8. $array 修改器

$push :
  它是用來對Array (list)數據類型進行 增長 新元素的,至關於Python中 list.append() 方法
append(item) db.users.updateMany({name:"金王吧"},{$push: {hobby:10}})

$pull :
   有了$push 對Array類型進行增長,就必定有辦法對其內部進行刪減,$pull 就是指定刪除Array中的某一個元素
remove(item) db.users.updateMany({name:"金王吧"},{$pull: {hobby:10}})

$pop :
   指定刪除Array中的第一個 最後一個 元素
pop() db.users.updateMany({name:"金王吧"},{$pop: {hobby:-1}})  1最後一個 -1第一個
  {$pop:{"test_list" : -1}}  -1 表明最前面, 1 表明最後邊 (這和Python正好相反)

 

9.Array Object 的特殊操做

創建一條數據包含array object

{
   "_id" : ObjectId("5b17d01a49bf137b585df891"),
   "name" : "騎士計劃",
   "price" : [
       19800,
       19500,
       19000,
       18800
  ],
   "other" : {
       "start" : "2019年11月1日",
       "start_time" : "09:30",
       "count" : 150
  }
}

(1) 把price 中的 19000 改成 19300
db.users.update({"name":"騎士計劃"},{$set:{"price.2":19300}})
這裏引用了下標的方法更改數值,"price.2"代指Array中的第三個元素

(2)若是price.1 中小於19800 則加200
db.users.update({"name":"騎士計劃","price":{$lt:19500}},{$inc:{"price.$":200}})

(3)把other中 count 改成 199
db.users.update({"name":"騎士計劃"},{$set:{"other.count":199}})

對了就是在這個對象 打點兒 key 就能夠更改數值了 , 要注意的是, 我們用的 $set 進行修改的,那麼就意味着,若是沒有"other.count"這個field的話,他會自動建立


(4)若是 count 小於 200 那麼 10
db.users.update({"name":"騎士計劃","other":{$lt:200}},{$inc:{"other.count":10}})
Array + Object 的用法 
{
   "_id" : ObjectId("5b17de9d44280738145722b9"),
   "name" : "騎士計劃",
   "price" : [
      {
           "start" : "2018年8月1日",
           "start_time" : "08:30",
           "count" : 150
      },
      {
           "start" : "2018年8月2日",
           "start_time" : "09:30",
           "count" : 160
      },
      {
           "start" : "2018年8月3日",
           "start_time" : "10:30",
           "count" : 170
      },
      {
           "start" : "2018年8月4日",
           "start_time" : "11:30",
           "count" : 180
      }
  ]
}

(1)把count 大於 175 的field  15
db.users.update({"price.count":{$gt:175}},{$inc:{"price.$.count":15}})

(2) count 大於 180 start 改成 "2018年8月10日"
db.users.update({"price.count":{$gt:180}},{$set:{"price.$.start":"2017年8月10日"}})

10. Limit選取 Skip跳過 Sort排序

(1)limit : 
   db.users.find({}).limit(2) 顯示條目數量
   limit(2) 就是選取兩條Document(數據條目), 從整個Collection的第一條 Document 開始選取兩條

(2)skip :跳過  db.users.find({}).skip(1) 跳過條目數量
    skip(2) 就是跳過兩條Document, 從整個Collection 的第一條 Document 開始跳,日後跳兩條
   
(3)簡單分頁(limit+skip)
   db.users.find({}).limit(當前頁碼*每頁條目).skip(每頁條目)

(4)Sort 排序 : 將結果按照關鍵字排序
  db.users.find({}).sort({ "price":1 })     1:ASC -1:DESC
   按照 price 字段進行升序 , 1 爲升序 , -1 爲降序

(5) 分頁排序多重用法 Limit + Skip + Sort:
db.users.find({}).sort({ age:-1 }).limit(2).skip(2)

***重點 : Sort + Skip + Limit 是有執行優先級的 他們的界別分別是
          優先 Sort  其次 Skip 最後 Limt

Skip + Limit 的優先級 也是先 Skip Limit**

 

11. python 操做MongoDB

安裝 pymongo

import pymongo
mongo = pymongo.MongoClient("127.0.0.1",27017)
MONGODB = mongo["SS2DAY04"]

增刪改查sql

1.查(find find_one)
result = list(MONGODB.users.find({}))
 for item in result:
    print(item)
 print(result)

result_one = MONGODB.users.find_one({})


2. (insert_one insert_many)
res = MONGODB.student.insert_one({"name":"yd","nickname":"wl"})
print(res.inserted_id,type(res.inserted_id))
res = MONGODB.student.insert_many([{"name":"yd","nickname":"wl"},     {"name":"wpq","nickname":"cb"},{"name":"lj","nickname":"dsb"}])

print(res.inserted_ids)

3. 刪(remove  delete_one delete_many)
# MONGODB.student.remove({})
# MONGODB.student.delete_one({"name":"yd"})
# MONGODB.student.delete_many({"name":"yd"})

4. (update update_one update_many)
# MONGODB.student.update({"name":"yd"})
# MONGODB.student.update_one({"name":"wpq"},{"$set":{"nickname":"peppa pig"}})
# MONGODB.student.update_many({},{"$set":{"age":84}})

5. 分頁
res = MONGODB.users.find({}).sort("age",pymongo.ASCENDING).limit(2).skip(0)
for i in res:
    print(i)
# 刪:
# MONGODB.student.delete_many({}) #清除數據
# MONGODB.student.drop()   # 刪除表格
相關文章
相關標籤/搜索