MongoDB 增删改查
MongoDB 增刪改查
- 學習目標:
- 學習內(nèi)容:
- 使用步驟
- 數(shù)據(jù)庫
- 創(chuàng)建數(shù)據(jù)庫
- 刪除數(shù)據(jù)庫
- 集合
- 創(chuàng)建集合
- 刪除集合
- 文檔
- 查找文檔
- 使用 find()查找文檔
- 使用 findOne()查找文檔
- 使用 pretty()將結(jié)果格式化
- 比較運算符
- 范圍運算符
- 邏輯運算符
- 正則表達式
- limit和skip
- 自定義查詢
- 投影
- 排序
- 統(tǒng)計個數(shù)
- 消除重復
- 添加文檔
- 使用 insert()添加文檔
- 使用 save()添加文檔
- 使用 insertOne()添加文檔
- 使用 insertMany()插入多條文檔
- 更新文檔
- 刪除文檔
- 總結(jié):
學習目標:
MongoDB的使用
環(huán)境:
Windows:10
MongoDB:5.0.2
MongoDB的安裝:https://blog.csdn.net/qq_44989881/article/details/119604129
學習內(nèi)容:
MongoDB 數(shù)據(jù)庫的操作
1、 數(shù)據(jù)庫的增刪改查
2、集合的增刪改查
3、文檔的增刪改查
使用步驟
數(shù)據(jù)庫
關(guān)于database的基礎命令
- 查看當前的數(shù)據(jù)庫:db
- 查看所有的數(shù)據(jù)庫:show dbs /show databases
- 切換數(shù)據(jù)庫:use 數(shù)據(jù)庫名
- 刪除當前的數(shù)據(jù)庫:db.dropDatabase()
創(chuàng)建數(shù)據(jù)庫
MongoDB 創(chuàng)建數(shù)據(jù)庫的語法格式如下:
use DATABASE_NAME如果數(shù)據(jù)庫不存在,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫。
> use vvcat
switched to db vvcat
> db
vvcat
刪除數(shù)據(jù)庫
MongoDB 刪除數(shù)據(jù)庫的語法格式如下:
db.dropDatabase()刪除當前數(shù)據(jù)庫,默認為 test,使用 db 命令查看當前數(shù)據(jù)庫名。
> db
demo
> show dbs
admin 0.000GB
config 0.000GB
demo 0.000GB
local 0.000GB
vvcat 0.000GB
切換到數(shù)據(jù)庫 demo :
> use demo
switched to db demo
執(zhí)行刪除命令:
注:db表示當前數(shù)據(jù)庫
> db.dropDatabase()
{ “ok” : 1 }
最后,通過 show dbs 命令查看數(shù)據(jù)庫是否刪除成功:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
vvcat 0.000GB
集合
關(guān)于集合的基礎命令
不手動創(chuàng)建集合:
向不存在的集合中第一次加入數(shù)據(jù)時,集合會被創(chuàng)建出來
手動創(chuàng)建集合:
- db.createCollection(name, options)
- 參數(shù)說明:
- name: 要創(chuàng)建的集合名稱
- options: 可選參數(shù), 指定有關(guān)內(nèi)存大小及索引的選項
- options 可以是如下參數(shù):
- capped:默認值為false表示不設置上限,值為true表示設置上限。
- size:當capped值為true時,需要指定此參數(shù),表示上限大小,當問你當達到上限時,會將之前的數(shù)據(jù)覆蓋,單位為字節(jié)。
- max :指定固定集合中包含文檔的最大數(shù)量。
- 參數(shù)說明:
查看集合:show collections
刪除集合:db.集合名稱.drop()
創(chuàng)建集合
在 vvcat 數(shù)據(jù)庫中創(chuàng)建 vvcat 集合
db.createCollection(“vvcat”)
{ “ok” : 1 }
如果要查看已有集合,可以使用 show collections 或 show tables 命令:
> show collections
vvcat
> show tables
vvcat
創(chuàng)建固定集合 sut,整個集合空間大小 10B,文檔最大個數(shù)為 5個。
> db.createCollection(“sut”, {capped: true, size:10, max : 5})
{ “ok” : 1 }
> show collections
vvcat
sut
在 MongoDB 中,不需要創(chuàng)建集合。當在插入一些文檔時,MongoDB 會自動創(chuàng)建集合。
> db.info.insert({“name” : “vvcat”})
WriteResult({ “nInserted” : 1 })
> show collections
info
sut
vvcat
刪除集合
刪除集合:db.集合名稱.drop()
> db.info.drop()
true
> show collections
vvcat
sut
從結(jié)果中可以看出 info 集合已被刪除。
文檔
關(guān)于文檔的基礎命令
- 查看當前集合下所有文檔:db.info.find()
- 插入文檔:db.COLLECTION_NAME.insert(document)
- 刪除一條文檔:db.inventory.deleteOne({})
- 刪除所有文檔:db.inventory.deleteMany({})
查找文檔
使用 find()查找文檔
find()查找文檔的語法格式如下:
db.集合名稱.find({條件文檔})> db.numbers.find()
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }
> db.numbers.find({num:3})
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
使用 findOne()查找文檔
findOne()查找文檔的語法格式如下:
db.集合名稱.findOne({條件文檔})查詢結(jié)果,只返回第一個。
> db.numbers.findOne()
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
> db.numbers.findOne({num:2})
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
使用 pretty()將結(jié)果格式化
pretty()查找文檔的語法格式如下:
db.集合名稱.find({條件文檔}).pretty()> db.vvcat.find({name:“vvcat”}).pretty() )
{
“_id” : ObjectId(“6114bbf9117b7214c4a99965”),
“name” : “vvcat”,
“age” : 20,
“gender” : “男”
}
{
“_id” : ObjectId(“1114bbf9217b7214c4a99344”),
“name” : “cat”,
“age” : 10,
“gender” : “男”
}
比較運算符
- 等于 ( = ) :默認是等于判斷,沒有運算符
- 小于 ( < ) :$It (less than)
- 小于等于 ( <= ):$lte (less than equal)
- 大于 ( > ) :$gt (greater than)
- 大于等于 ( >= ):$gte
- 不等于 ( != ):$ne
查找num小于等于3的文檔:
> db.numbers.find({num:{$lte:3}})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
查找num小于3的文檔:
> db.numbers.find({num:{$lt:3}})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
查詢num為2,4的文檔
> db.numbers.find({num:{$in:[2,4]}})
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
查詢num不為2,4的文檔
> db.numbers.find({num:{$nin:[2,4]}})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }
范圍運算符
使用 “in","in","in","nin” 判斷是否在某個范圍內(nèi)
> db.numbers.find({num:{$in:[2,4]}})
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
邏輯運算符
- and:在json中寫多個條件即可
- or:使用$or,值為數(shù)組,數(shù)組中每個元素為json
查找num大于等于3,且_id等于6114b854117b7214c4a99955的文檔。
> db.numbers.find({num:{$gte:3},_id:ObjectId(“6114b854117b7214c4a99955”)})
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
查找num大于3,或_id等于6114b854117b7214c4a99951的文檔。
> db.numbers.find({$or:[{num:{$gt:3}},{_id:ObjectId(“6114b854117b7214c4a99951”)}]})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }
查找num小于等于2,或_id是6114b8df117b7214c4a9995e,6114b8df117b7214c4a9995f的文檔
db.numbers.find({$or:[{num:{$lte:2}},{"_id":{$in:[ObjectId(“6114b8df117b7214c4a9995e”),ObjectId(“6114b8df117b7214c4a9995f”)]}}]})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995e”), “num” : 4 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995f”), “num” : 5 }
查找num小于等于3,或_id等于6114b854117b7214c4a99951的文檔,并且num大于0的文檔。
> db.numbers.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{num:{lte:3}},{_id:ObjectId(“6114b854117b7214c4a99951”)}],num:{$gt:0}})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995b”), “num” : 1 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995c”), “num” : 2 }
{ “_id” : ObjectId(“6114b8df117b7214c4a9995d”), “num” : 3 }
正則表達式
使用//或$regex編寫正則表達式
在集合中添加一些文檔數(shù)據(jù)
> db.collection.insertMany([{a:“assasadas”}, {a:“asqwewqrqw”},{a:“ghrferfersd”}, {a:“ddsssff”}])
{
“acknowledged” : true,
“insertedIds” : [
ObjectId(“6114d23f117b7214c4a999d4”),
ObjectId(“6114d23f117b7214c4a999d5”),
ObjectId(“6114d23f117b7214c4a999d6”),
ObjectId(“6114d23f117b7214c4a999d7”)
]
}
查找以 as 開頭的文檔
> db.collection.find({a:/^as/})
{ “_id” : ObjectId(“6114d23f117b7214c4a999d4”), “a” : “assasadas” }
{ “_id” : ObjectId(“6114d23f117b7214c4a999d5”), “a” : “asqwewqrqw” }
查找以 f 結(jié)尾的文檔
> db.collection.find({a:{$regex:‘f$’}})
{ “_id” : ObjectId(“6114d23f117b7214c4a999d7”), “a” : “ddsssff” }
查找包含f字母的文檔
> db.collection.find({a:{$regex:‘f’}})
{ “_id” : ObjectId(“6114d23f117b7214c4a999d6”), “a” : “ghrferfersd” }
{ “_id” : ObjectId(“6114d23f117b7214c4a999d7”), “a” : “ddsssff” }
limit和skip
- 方法limit():用于讀取指定數(shù)量的文檔
- 方法skip():用于跳過指定數(shù)量的文檔
以下為自定義待查詢的數(shù)據(jù):
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
{ “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
limit()查找文檔的語法格式如下:
db.集合名稱.find().limit(NUMBER)查詢前3條數(shù)據(jù)
> db.numbers.find().limit(3)
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
skip()查找文檔的語法格式如下:
db.集合名稱.find().skip(NUMBER)跳過前3條數(shù)據(jù),從第4條數(shù)據(jù)開始查詢
> db.numbers.find().skip(3)
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
{ “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
同時使用
db.集合名稱.find().limit(NUMBER).skip(NUMBER)或
db.集合名稱.find().skip(NUMBER).limit(NUMBER)先跳過3條數(shù)據(jù),然后顯示跳過以后的3條數(shù)據(jù)
> db.numbers.find().skip(3).limit(3)
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
db.numbers.find().limit(3).skip(3)
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
自定義查詢
以下為自定義待查詢的數(shù)據(jù):
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
{ “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
使用$where后面寫一個函數(shù),返回滿足條件的數(shù)據(jù)
查詢num小于的5的文檔
> db.numbers.find({}
… $where:function(){
… return this.num<5;
… }})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
投影
在查詢到的返回結(jié)果中,只選擇必要的字段
投影的語法格式如下:
參數(shù)為字段與值,值為1表示顯示,值為0不顯示
特殊:對于_id列默認是顯示的,如果不顯示需要明確設置為0
查找num大于3的文檔,不顯示_id,只顯示num
> db.numbers.find({num:{$gte:3}},{_id:0})
{ “num” : 3 }
{ “num” : 4 }
{ “num” : 5 }
{ “num” : 6 }
{ “num” : 7 }
查找全部的文檔,只顯示 _id 不顯示 num
> db.numbers.find({},{_id:1,num:0})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”) }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”) }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”) }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”) }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”) }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”) }
{ “_id” : ObjectId(“6114b854117b7214c4a99957”) }
排序
方法sort(),用于對集進行排序
sort()方法的語法格式如下:
- 參數(shù)1為升序排列
- 參數(shù)-1為降序排列
降序排列
> db.numbers.find().sort({num:-1})
{ “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
升序排列
> db.numbers.find().sort({num:1})
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
{ “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
查找num小于等于3的文檔進行降序排序
> db.numbers.find({num:{$lte:3}}).sort({num:-1})
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
統(tǒng)計個數(shù)
方法count()用于統(tǒng)計結(jié)果集中文檔條數(shù)
count()方法的語法格式如下:
統(tǒng)計num小于等于3的條數(shù)
> db.numbers.find({num:{$lte:3}}).count()
3
統(tǒng)計num小于等于5且,_id為 ObjectId(“6114b854117b7214c4a99951”) 的條數(shù)
> db.numbers.count({num:{$lte:5}, _id:ObjectId(“6114b854117b7214c4a99951”)})
1
消除重復
方法distinct()對數(shù)據(jù)進行去重
db.集合名稱.distinct('去重字段',{條件})以下為自定義待查詢的數(shù)據(jù):
{ “_id” : ObjectId(“6114b854117b7214c4a99951”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a99952”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a99953”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a99954”), “num” : 4 }
{ “_id” : ObjectId(“6114b854117b7214c4a99955”), “num” : 5 }
{ “_id” : ObjectId(“6114b854117b7214c4a99956”), “num” : 6 }
{ “_id” : ObjectId(“6114b854117b7214c4a99957”), “num” : 7 }
{ “_id” : ObjectId(“6114b854117b7214c4a999a1”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a999a2”), “num” : 2 }
{ “_id” : ObjectId(“6114b854117b7214c4a999a3”), “num” : 3 }
{ “_id” : ObjectId(“6114b854117b7214c4a999b1”), “num” : 1 }
{ “_id” : ObjectId(“6114b854117b7214c4a999c1”), “num” : 1 }
查看不重復的num
> db.numbers.distinct(‘num’)
[ 1, 2, 3, 4, 5, 6, 7 ]
查看小于5不重復的num
> db.numbers.distinct(‘num’,{num:{$lt:5}})
[ 1, 2, 3, 4 ]
添加文檔
以下文檔可以存儲在 MongoDB 的 vvcat 數(shù)據(jù)庫 的 col 集合中:
使用 insert()添加文檔
> db.info.insert({“name”:“vvcat”, “age”:20})
WriteResult({ “nInserted” : 1 })
>db.info.insert({name:“張三”, age:18})
WriteResult({ “nInserted” : 1 })
查看已插入文檔:
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “張三”, “age” : 18 }
如果插入重復_id的文檔會報錯:
> db.info.insert({_id:1,name:“李四”,age:10})
WriteResult({ “nInserted” : 1 })
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “張三”, “age” : 18 }
{ “_id” : 1, “name” : “李四”, “age” : 10 }
db.info.insert({_id:1,name:“李四”,age:10})
> db.info.insert({_id:1,name:“李四”,age:20})
WriteResult({
“nInserted” : 0,
“writeError” : {
“code” : 11000,
“errmsg” : “E11000 duplicate key error collection: vvcat.info index: id dup key: { _id: 1.0 }”
}
})
使用 save()添加文檔
保存
- db.集合名稱.save(document)
- 如果文檔的_id已經(jīng)存在則修改,如果文檔的_id不存在則添加
> db.info.save({_id:1,name:“李四”,age:20})
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “張三”, “age” : 18 }
{ “_id” : 1, “name” : “李四”, “age” : 20 }
注:如果不指定 _id 字段 save() 方法類似于 insert() 方法。如果指定 _id 字段,則會更新該 _id 的數(shù)據(jù)。
使用 insertOne()添加文檔
> db.collection.insertOne({“a”: 1})
{
“acknowledged” : true,
“insertedId” : ObjectId(“6113c29666d7236471944c09”)
}
> db.collection.find()
{ “_id” : ObjectId(“6113c29666d7236471944c09”), “a” : 1 }
使用 insertMany()插入多條文檔
> db.collection.insertMany([{“b”: 2}, {‘c’: 3}])
{
“acknowledged” : true,
“insertedIds” : [
ObjectId(“6113c35866d7236471944c0c”),
ObjectId(“6113c35866d7236471944c0d”)
]
}
> db.collection.find()
{ “_id” : ObjectId(“6113c29666d7236471944c09”), “a” : 1 }
{ “_id” : ObjectId(“6113c35866d7236471944c0c”), “b” : 2 }
{ “_id” : ObjectId(“6113c35866d7236471944c0d”), “c” : 3 }
更新文檔
db.集合名稱.update(<query>,<update>,{multi:<boolean>})
- 參數(shù)query:查詢條件
- 參數(shù)update:更新操作符
- 參數(shù)multi:可選,默認是false,表示只更新找到的第一條記錄,值為true表示把滿足條件的文檔全部更新
使用update替換一條文檔
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “張三”, “age” : 18 }
{ “_id” : 1, “name” : “李四”, “age” : 20 }
把{“name” : “李四”, “age” : 20}的數(shù)據(jù)替換為{name:‘王五’}
> db.info.update({name:‘李四’},{name:‘王五’})
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “張三”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
使用update更新一條文檔,把name為張三的數(shù)據(jù)替換成name為趙六
> db.info.update({name:‘張三’},{$set:{name:‘趙六’}})
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “趙六”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
更新全部
首先在添加多條文檔
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “趙六”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
{ “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “張三”, “age” : 33 }
{ “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “張三”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “張三”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “張三”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “張三”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “張三”, “age” : 33 }
{ “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “張三”, “age” : 33 }
使用{multi:true}參數(shù)達到更新多條的目的
> db.info.update({name:‘張三’},{$set:{name:‘vvcat’}},{multi:true})
WriteResult({ “nMatched” : 7, “nUpserted” : 0, “nModified” : 7 })
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “趙六”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
{ “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “vvcat”, “age” : 33 }
注意:“multi update only works with $ operators”
刪除文檔
db.集合名稱.removel(<query>,{justOne:<boolean>})
- 參數(shù)query:可選,刪除的文檔的條件
- 參數(shù)justOne:可選,如果設為true或1,則只刪除一條,默認false,表示刪除多條
> db.info.find()
{ “_id” : ObjectId(“61138f22a0b643ed938cc2a6”), “name” : “vvcat”, “age” : 20 }
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “趙六”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
{ “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “vvcat”, “age” : 33 }
設置{justOne:true}參數(shù),只刪除一條文檔
> db.info.remove({name:‘vvcat’},{justOne:true})
WriteResult({ “nRemoved” : 1 })
> db.info.find()
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “趙六”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
{ “_id” : ObjectId(“6113ab66a0b643ed938cc2a8”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab67a0b643ed938cc2a9”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2aa”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab68a0b643ed938cc2ab”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ac”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab69a0b643ed938cc2ad”), “name” : “vvcat”, “age” : 33 }
{ “_id” : ObjectId(“6113ab6aa0b643ed938cc2ae”), “name” : “vvcat”, “age” : 33 }
刪除所有滿足條件的數(shù)據(jù)文檔
> db.info.remove({name:‘vvcat’})
WriteResult({ “nRemoved” : 7 })
> db.info.find()
{ “_id” : ObjectId(“6113a18ba0b643ed938cc2a7”), “name” : “趙六”, “age” : 18 }
{ “_id” : 1, “name” : “王五” }
如果你想刪除集合中所有的數(shù)據(jù),可以使用以下方式:
> db.info.remove({})
WriteResult({ “nRemoved” : 2 })
> db.collection.find()
總結(jié):
MongoDB 中默認的數(shù)據(jù)庫為 test,如果你沒有創(chuàng)建新的數(shù)據(jù)庫,集合將存放在 test 數(shù)據(jù)庫中。
在 MongoDB 中,集合只有在內(nèi)容插入后才會創(chuàng)建,創(chuàng)建集合(數(shù)據(jù)表)后要再插入一個文檔(記錄),集合才會真正創(chuàng)建。
創(chuàng)建日期語句如下:參數(shù)的格式為 YYYY-MM-DD new Date(‘2021-08-11’)
> new Date(‘2021-08-11’)
ISODate(“2021-08-11T00:00:00Z”)
每個文檔都有一個屬性,為_id,保證每個文檔的唯一性
可以自己去設置_id插入文檔,如果沒有提供,那么 MongoDB 為每個文檔提供了一個獨特的_id,類型為objectID
objectID是一個12字節(jié)的十六進制數(shù):
- 前4個字節(jié)為當前時間戳
- 接下來3個字節(jié)的機器ID
- 接下來的2個字節(jié)中 MongoDB 的服務進程id
- 最后3個字節(jié)是簡單的增量值
文檔支持的數(shù)據(jù)類型
- Object ID:文檔ID
- String:字符串,最常用,必須是有效的UTF-8
- Boolean:存儲一個布爾值,true 或 false
- Integer:整數(shù)可以是32位或64位,取決于操作系統(tǒng)
- Double:存儲浮點值
- Arrays:數(shù)組或列表,多個值存儲到一個鍵
- Object:用于嵌入式的文檔,即一個值為一個文檔
- Null:存儲Null值
- Timestamp:時間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù)
- Data:存儲當前日期或時間的UNIX時間格式
在插入文檔時,MongoDB 首先檢查固定集合的 size 字段,然后檢查 max 字段。
插入文檔也可以使用 db.col.save(document) 命令。
- db.collection.insert({}) 插入數(shù)據(jù),’_id’ 存在就報錯
- db.collection.save({}) 插入數(shù)據(jù),’_id’ 存在會更新
MongoDB刪除文檔
- 1.默認情況會刪除所有滿足條件的數(shù)據(jù)。
- 2.{justOne:true}能達到只刪除一條的效果
總結(jié)
以上是生活随笔為你收集整理的MongoDB 增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 安装 MongoDB 5
- 下一篇: Raspberry 4B 串口通信