1. 程式人生 > >【MongoDB增刪改查】

【MongoDB增刪改查】

MongoDB與MySQL的對應關係

關鍵字 MongoDB MySQL
DB DB
table Collections
row Documents
column Field

MongoDB增刪改查

⚠️注意:下面的增刪改查語法中:db是關鍵字,而table是具體的表名稱

建立/檢視/使用/刪除 表/庫

show dbs  # 查磁碟上已存在的所有庫
db  # 查當前使用的庫
use db  # 使用資料庫,如果沒有此庫,則建立並使用
show tables  # 查當前庫下的所有表
db.table.drop()  # 刪除表
db.dropDatabase()  # 刪除當前庫

db.table.insert({name: "張三", age: 30})
# 插入一條資料,如果沒有此表,則會自動建立

db.table.insertOne({name: "李四", age: 40})
# 單條插入(官方推薦寫法)

db.table.insertMany(
[{name: "王五", age: 50}, {name: "小六", age: 60}]) # 多條插入(官方推薦寫法)

db.table.remove({})
# 無條件刪除,即刪除所有資料,清空Collection(表)

db.table.remove({name: "張三"})
# 指定條件刪除,這裡將刪除所有name為"張三"的資料

db.table.deleteOne({name: "李四"})
# 單條刪除,刪除name為"李四"的第一條資料(官方推薦寫法)

db.table.deleteOne()
# 不指定條件將刪除第一條資料

db.table.deleteMany(
{$or: [{name: "小六"}, {name: "張三"}]}) # 多條刪除,刪除name為"小六"或"張三"的所有資料(官方推薦寫法) db.table.update({name: "張三"}, {$unset: {age: 1}}) # 這個操作相當於關係型資料庫中刪除欄位 # 將name為"張三"的age欄位刪除 # 1可換為任何值

db.table.update({name: "張三", {$set: {age: 33}})
# 把name為"張三"的資料的age改為33

db.table.update({}, {$set: {name: "王五"}})
# 不指定條件更新,將Collections(表)中的第一條資料的name更新為"王五"

db.table.updateOne({name: "李四"}, {$set: {age: 44}})
# 單條修改,根據條件修改最靠前的一條記錄

db.table.updateMany({name: "王五"}, {$set: {hobby: ["抽菸", "喝酒", "湯頭"]}})
# 多條修改,根據條件修改所有匹配到的資料
# 注意:MongoDB的靈活性很好——沒有即建立⬇️
# 如果該Collection(表)中沒有名為hobby的Field(列),那麼它將會自動建立一個名為hobby的列

db.table.updateMany({}, {$set: {hobby: ["抽菸", "喝酒", "湯頭"]}})
# updateMany不指定條件,將修改Collections(表)中的所有資料

db.table.updateMany({name: "王五"}, {$push: {hobby: "談戀愛"}})
# $push是用來對Array(列表)資料型別進行增加元素的
# 將所有name為"張三"的資料的hobby中增加一個新元素"談戀愛"

db.table.updateMany({name: "張三"}, {$pull: {hobby: "談戀愛"}})
# $pull是用來對Array(列表)資料型別進行刪除元素的
# 將所有name為"張三"的資料的hobby中名為"談戀愛"的所有元素刪除

db.userinfo.updateMany({name: "王五"}, {$pop: {hobby: 1}})
# $pop用於將Array(列表)資料型別中的第一個或最後一個元素刪除
# {$pop: {hobby: 1}} 表示刪除最後第一個,可使用-1來刪除第一個

db.table.updateOne({name: "張三"}, {$set: {"hobby.0": "抽大煙"}})
# 根據下標將hobby中的"抽菸"更新為"抽大煙"
# 注意:這裡的"hobby.0"必須加上引號

db.table.updateOne({name: "張三", hobby: "喝酒"}, {$set: {"hobby.$": "喝啤酒"}})
# 現在的hobby.$中的$為"喝酒",即$為篩選條件中的值
# 還有一點,如果有多層Array(列表),只限用於第一層
# 注意:這裡的"hobby.$"必須加上引號

db.table.updateOne({name: "張三"}, {$inc: {age: 1}})
# 將name為"張三"的年age加1

db.table.updateOne({name: "張三"}, {$inc: {score: -20}})
# 將name為"李四"的age減20

db.table.updateOne({name: "李四"}, {$inc: {"other.weight": 10}})
# 將name為"張三"的資料中的名為other的(Object)物件中的weight加10
# 注意:這裡的"other.weight"必須加上引號
# $inc的底層是將要操作的資料,加上某個值然後儲存,如果是字串則拼接

db.table.find()
# 無條件查詢,將Collection(表)中的所有資料一次性返回

db.table.find({name: "小六"})
# 多條查詢,將返回name為"小六"的所有資料

db.table.find({name: "張三", age: 33})
# 查name為"張三"且age為33資料

db.table.find({$or: [{name: "張三"}, {name: "李四"}]})
# 查name為"張三"或"李四"的所有資料

db.table.find({age: {$gt: 40}})
# 查age大於40的資料
# 同樣的語法還有:{$gte: 大於等於, $lt: 小於, $lte: 小於等於, $eq: 等於}

db.table.find({name: {$in: ["張三", "李四", "王五"]}})
# 查name為"張三"或"李四"或"王五"的所有資料

db.table.find({hobby: {$all: ["抽菸", "喝酒"]}})
# 查名為hobby的Field(欄位)中包含"抽菸"或"喝酒"的所有資料

db.ui.find({}, {_id: 0, hobby: 0})
# 可以塞選欄位
# 這裡將過濾掉"_id"和"hobby"欄位

db.table.findOne()
# 無條件查詢一條資料,預設返回當前Collection(表)中的第一條資料

db.table.findOne({name: "小六"})
# 單條查詢,將返回name為"小六"的第一條記錄

db.table.findOne({"other.height": 1.82})
# 查名為other的Object(物件)中的height為1.82的資料
# 注意:這裡的"other.height"必須加上引號

db.table.find().limit(5)
# limit() 要展示的數量,從前往後
# 這裡將展示出前5條資料

db.table.find().skip(3)
# skip()  跳過幾條資料
# 這裡將跳過前3條資料,直接從第四條開始

db.table.find().sort({id: 1})
# sort()  排序,1為正序 -1為倒序
# 這裡將根據id進行正序

db.table.find().sort({id: -1}).skip(2).limit(3)
# 根據id進行倒序,排序後再跳過前兩條資料,最後從3條資料開始往後取3條資料
# 執行優先順序:sort > skip > limit