MongoDB 資料庫操作

HuDu發表於2021-07-28

一、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 資料庫操作

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 tablesshow 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)

MongoDB 資料庫操作

MongoDB 資料庫操作

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)

MongoDB 資料庫操作

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-11表示尾部刪除,-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 協議》,轉載必須註明作者和本文連結

相關文章