一、MongoDB 資料庫操作
1、建立資料庫
use 命令表示切換資料庫,如果資料庫不存在會建立資料庫。
use 資料庫名
2、顯示資料庫
通過 show dbs 或 show databases 檢視資料庫
注意
1.不同的角色看見的資料庫時不一樣的,管理員看見所有資料庫,普通使用者只能看見自己的資料庫
2.建立新的資料庫裡面沒有資料時,通過 show dbs 或 show databases 是無法檢視到的。需要向資料庫新增一個 document(db.test.insert({"key":"value","key2":"value2"})),才能看到
3、刪除資料庫
刪除資料庫需要切換到需要刪除的資料庫中,且登入使用者具有 dbAdminAnyDatabase 許可權,執行 db.dropDatabase()。
use test
db.dropDatabase()
二、MongoDB 集合操作
1、建立集合
MongoDB 中的集合是一組文件的集,相當於關係型資料庫中的表。
MongoDB 使用 db.createCollection()
函式來建立集合
語法格式:db.createCollection(name,options)
。name
:要建立的集合名稱options
:可選引數,指定有關內容大小及索引的選項
MongoDB 其實不需要顯式的去建立集合,當使用
use test
db.table1.insert()
就能隱式的建立 table1 集合
建立一個預設選項的集合命令如下:
>db.createCollection("c1")
{"ok":1}
>db.c1.insert("a":"1")
>show tables
c1
>
# 方式一:
db.c2.insert({"a":"1"}) # 當第一個文件插入時,集合就會被建立,幷包含該文件
# 方式二:
db.c3 # 建立一個空集合,裡面沒有資料時通過 show tables 或 show collections 是無法檢視到的。需要向集合插入一個文件才能看見。
2、檢視集合
通過 show tables
或 show collections
檢視所有集合
> show tables;
user
> db.c1.insert({"a":1})
WriteResult({ "nInserted" : 1 })
> show tables;
c1
user
> show collections
c1
通過 db.COLLECTION_NAME.stats()
檢視集合詳情
>db.c3.stats()
3、刪除集合
通過 db.COLLECTION_NAME.drop()
刪除集合
> show collections
c1
user
> db.c1.drop()
true
> show collections
user
>
三、Document 操作
1、插入文件
1.1、單條插入
可以使用 insert/insertOne/save
插入單條文件:
- db.c1.insert({“name”:”a”})
- db.c1.insertOne({“name”:”a”})
- db.c1.save({“name”:”a”})
1.1.1、insert
通過 db.COLLECTION_NAME.insert(document)插入文件。
插入文件時如果沒有指定_id
則預設為OjectId
型別,_id
不能重複,且在插入後不可變
user1 = {
"name":"zhangsan",
"age":18,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
db.user.insert(user1)
1.1.2、insertOne
在 mongoDB 3.2 版本後提供了insertOne()
函式用於插入單條文件
user2 = {
"_id":"2",
"name":"lisi",
"age":20,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"SH"
}
}
db.user.insertOne(user2)
1.1.3、save
插入文件也可以使用 db.COLLECTION_NAME.save(document)
命令
如果不指定_id
欄位save()
方法等同於insert()
方法。如果指定_id
欄位,則變為更新文件操作
user3 = {
"_id":"3",
"name":"wangwu",
"age":22,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"JS"
}
}
db.user.save(user3)
1.2、批量插入
可以使用 insert/insertMany/save
插入多條文件。區別在於把單條插入時函式的物件型別{}
變成陣列型別[{},{}]
:
db.c1.insert([{name:"a"},{name:"b"}])
db.c1.insertMany([{name:"a"},{name:"b"}])
db.c1.save([{name:"a"},{name:"b"}])
1.2.1 insert
user1 = {
"_id":1,
"name":"zhangsan",
"age":22,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"JS"
}
}
user1 = {
"_id":2,
"name":"lisi",
"age":22,
"hobbies":["music","read"],
"addr":{
"country":"China",
"city":"NJ"
}
}
...
db.user.insert([user1,user2,user3,user4,...])
1.2.2 save
db.user.insertMany([user1,user2,user3,user4,...])
1.2.3 save
db.user.save([user1,user2,user3,user4,...])
2、更新文件
2.1、update 函式
通過 update
系列函式或者 save
函式可以更新集合中的文件。我們來詳細看下update
函式的使用。
update()
函式用於更新已存在的文件,語法格式如下:
db.COLLECTION_NAME.update(query,update,options)
query
: update 的查詢條件,類似 SQL update 語句中 where 部分update
: updte 的物件和一些更新的操作符(如$,Sinc…)等,也可以理解為 SQL update 語句總的 set 部分upsert
: 可選,如果不存在 update 的文件,是否插入該文件。true為插入,預設為false,不插入multi
: 可選,是否批量更新。true 表示按條件查詢出來的多條記錄全部更新,false 只更新找到的第一條記錄,預設是false
user = {
"name":"wangwu",
"age":20,
"hobbiess":["mucis","read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
# 修改單條
db.user.updateOne({"name":"lisi"},user)
# 查到到的匹配資料如果多條,只會修改第一條
db.user.update({"name":"lisi",user}) # 修改單條等價於 updateOne()
# 查到到的匹配資料如果多條,修改所有匹配的資料
db.user.update({"name":"lisi"},{"$set":user},false,true) # 修改多條
db.user.updateMany({"name":"lisi"},{"$set":user}) # 修改多條
注意:更新文件是整個文件的操作,如果修改的值只有 name 和 age,除了 _id
以外的其它屬性將會被刪除
2.2、更新操作符
2.2.1、$set 操作符
# 更新
db.user.update({"name":"zhangsan"},{$set:{age:18}},{multi:true})
2.2.2、$inc 操作符
# 年齡加5
db.user.update({"name":"wangwu"},{$inc:{age:5}})
2.2.3、$unset 操作符
# 用來刪除鍵,讓鍵的值為空,在編寫命令時$unset裡field取值任意,無論給什麼值都表示刪除
db.user.update({name:"wangwu"},{$unset:{address:"隨意"}})
2.2.4、$push 操作符
# 向文件某個陣列型別的鍵新增一個陣列元素,不過濾重複的資料。新增時鍵存在,要求鍵值型別必須時陣列;鍵不存在,則建立陣列型別的鍵
db.user.update({},{$push:{hobby:"寫程式碼"}},{multi:true})
2.2.5、$pop 操作符
# 刪除資料元素,可取的值只能是 1 或 -1。1表示尾部刪除,-1表示頭部刪除
# 刪除 hobby 中第一個元素。其中 $pop 中的 key 是要操作的陣列型別屬性
db.user.update({"name":"lisi"},{$pop:{hobby:-1}})
2.2.6、$pull 操作符
# 從陣列中刪除滿足條件的元素,只要滿足條件都刪除
db.user.update({name:"wangwu"},{$pull:{hobby:"test"}})
2.2.7、$pullAll 操作符
# 可以設定多個條件
db.user.update({name:"wangwu"},{$pull:{hobby:["test1","test2"]}})
2.2.8、$rename
# 對鍵進行重新命名,任何型別的鍵都能重新命名
db.user.update({name:"wangwu"},{$rename:{name:"username"}})
3、刪除文件
3.1、MongoDB remove()
函式是用來移除集合中的資料,其語法格式如下所示:
db.user.remove(<query>,{justOne:<boolean>})
- query:(可選)刪除的文件的條件
- juistOne:(可選)如果設為 true,則只有一個文件,False刪除所有匹配的資料等價於 db.user.deleteOne():刪除符合條件的第一個文件
db.user.remove({"name":"lisi"},{justOne:true}) db.user.deleteOne({"name":"lisi"})
3.2、刪除所有資料命令:
db.user.remove({})
等價於
清空該集合(表)
db.user.deleteMany({})
# 有嵌入文件,且內容含有"country":"China"的全部刪除
db.user.deleteMany({"addr.country":"China"})
# 刪除 id 大於等於 3 的所有文件
db.user.deletemany({"_id":{"$gte":3}})
# 刪除所有
db.user.remove({})
db.user.deleteMany({})
本作品採用《CC 協議》,轉載必須註明作者和本文連結