使用了不存在的對象即建立該對象 **不存在關係連接**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值)
數據類型:
(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")
}
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格式
$lt: <
$lte: <=
$gt: >
$gte: >=
$eq: ==
: : == or = "name":"王舞" 即 name=王舞
"$" 在 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層)
$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]不行)
$set:
直接將字段的值設定爲value
$unset:
刪除字段(用來刪除Key(field)的)
$inc:
將查詢到的結果 加上某一個值 而後保存
原值增長 db.users.updateMany({name:"金王吧"},{$inc: {cursors: 1}})
db.users.updateMany({name:"金王吧"},{$inc: {cursors: -10}})
$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正好相反)
創建一條數據包含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日"}})
(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**
安裝 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() # 刪除表格