關(guān)閉服務(wù)
db.shutdownServer() #通用
systemctl status mongod.service #適用于apt安裝的
1. 選擇和創(chuàng)建數(shù)據(jù)庫(kù)
- 數(shù)據(jù)庫(kù)的創(chuàng)建和進(jìn)入數(shù)據(jù)庫(kù)都是一個(gè)命令
use 庫(kù)名
- 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)名為articledb
use articledb
注意mongodb的存儲(chǔ)方式,只創(chuàng)建庫(kù)沒有數(shù)據(jù)時(shí)候,這個(gè)時(shí)候數(shù)據(jù)庫(kù)是存在內(nèi)存中,只有數(shù)據(jù)庫(kù)中有內(nèi)容才會(huì)存放到磁盤,所以創(chuàng)建完沒有數(shù)據(jù)的庫(kù)使用show dbs是看不到庫(kù)的。
- 查看權(quán)限內(nèi)所有的數(shù)據(jù)庫(kù)
show dbs
或者
show databases
- 查看當(dāng)前正在使用的數(shù)據(jù)庫(kù)
db
有一些數(shù)據(jù)庫(kù)名是保留的,可以直接訪問這些有特殊作用的數(shù)據(jù)庫(kù)
- admin: 從權(quán)限的角度來(lái)看,這是"root"數(shù)據(jù)庫(kù)。要是將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫(kù),這個(gè)用戶自動(dòng)繼承所有數(shù)據(jù)庫(kù)的權(quán)限。一些特定的服務(wù)器端命令也只能從這個(gè)數(shù)據(jù)庫(kù)運(yùn)行,比如列出所有數(shù)據(jù)庫(kù)或者關(guān)閉服務(wù)器。
- local: 這個(gè)數(shù)據(jù)永遠(yuǎn)不會(huì)被復(fù)制,可以用來(lái)存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合
- config: 當(dāng)mongo用于分片設(shè)置時(shí),config數(shù)據(jù)庫(kù)在內(nèi)部使用,用于保存分片的相關(guān)信息
2. 數(shù)據(jù)庫(kù)的刪除
db.dropDatabase()
3. 集合操作
3.1 集合的顯式創(chuàng)建
基本語(yǔ)法格式
db.createCollection(集合名稱)
- 創(chuàng)建一個(gè)名為mycollection的普通集合
db.createCollection(mycollection)
- 查看當(dāng)前庫(kù)中的集合(表)
show collections
或
show tables
3.2 集合的隱形創(chuàng)建
當(dāng)向一個(gè)集合插入一個(gè)文檔的時(shí)候,如果集合不存在,則自動(dòng)創(chuàng)建集合
具體看文檔插入部分
通常我們使用隱式創(chuàng)建文檔
3.3 刪除集合
基本語(yǔ)法格式
db.集合名.drop()
- 刪除mycollection集合
db.mycollection.drop()
4. 文檔的基本操作(增刪改查)
4.1 文檔的插入
- 單個(gè)文檔插入
創(chuàng)建一個(gè)comment的集合,并插入文檔
db.comment.insert({"articleid":"10000","content":"今天天氣真好,陽(yáng)光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})
提示:
1)comment集合如果不存在,則會(huì)自動(dòng)創(chuàng)建
2)mongo中的數(shù)字,默認(rèn)情況下是double類型,如果要存整型,必須使用函數(shù)NumberInt(整型數(shù)字),否則取出來(lái)就有問題了
3)插入當(dāng)前日期使用new Date()
4)插入的數(shù)據(jù)沒有指定_id,會(huì)自動(dòng)生成主鍵值
5)如果某個(gè)字段沒值,可以賦值為null,或者不寫該字段
- 批量插入
批量插入多條文章評(píng)論:
> db.comment.insertMany([{"articleid":"10001","content":"Are you ok","userid":"1002","nickname":"alonzo","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{"articleid":"10001","content":"3q","userid":"1005","nickname":"leijun","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{"articleid":"10001","content":"very match,陽(yáng)光明媚","userid":"mifans","nickname":"alonzo","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{"articleid":"10001","content":"hello mifans","userid":"1003","nickname":"zhangsan","createdatetime":new Date(),"likenum":NumberInt(777),"state":"1"},
{"articleid":"10001","content":"base","userid":"1003","nickname":"zhangsan","createdatetime":new Date(),"likenum":NumberInt(777),"state":"1"}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("604ac2298b964c15b2b578bd"),
ObjectId("604ac2298b964c15b2b578be"),
ObjectId("604ac2298b964c15b2b578bf"),
ObjectId("604ac2298b964c15b2b578c0"),
ObjectId("604ac2298b964c15b2b578c1")
]
}
學(xué)過(guò)Python應(yīng)該就看出來(lái),這里實(shí)際就是將多個(gè)字典插入列表里,形成一個(gè)表的多條數(shù)據(jù)
4.2 文檔的查詢
語(yǔ)法
db.文檔名.find()
或
db.文檔名.find({})
> db.comment.find()
{ "_id" : ObjectId("6049d65505bd0c812f09cec6"), "articleid" : "10000", "content" : "今天天氣真好,陽(yáng)光明媚", "userid" : "1001", "nickname" : "Rose", "createdatetime" : ISODate("2021-03-11T08:35:33.041Z"), "likenum" : 10, "state" : null }
{ "_id" : ObjectId("604ac2298b964c15b2b578bd"), "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578be"), "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 888, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578bf"), "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "mifans", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 666, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578c0"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 777, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578c1"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 777, "state" : "1" }
- 條件查詢,比如查詢articleid為10001的記錄
> db.comment.find({articleid:"10001"})
{ "_id" : ObjectId("604ac2298b964c15b2b578bd"), "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578be"), "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 888, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578bf"), "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "mifans", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 666, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578c0"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 777, "state" : "1" }
{ "_id" : ObjectId("604ac2298b964c15b2b578c1"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T01:21:45.418Z"), "likenum" : 777, "state" : "1" }
- 如上條件,但只想返回第一條數(shù)據(jù)
> db.comment.findOne({articleid:"10001"})
{
"_id" : ObjectId("604ac2298b964c15b2b578bd"),
"articleid" : "10001",
"content" : "Are you ok",
"userid" : "1002",
"nickname" : "alonzo",
"createdatetime" : ISODate("2021-03-12T01:21:45.418Z"),
"likenum" : 1000,
"state" : "1"
}
- 投影查詢
查詢nickname為alonzo,只顯示userid且不顯示_id:
> db.comment.find({nickname:"alonzo"},{userid:1,_id:0})
{ "userid" : "1002" }
{ "userid" : "mifans" }
查詢結(jié)果只顯示userid、nickname不顯示_id:
> db.comment.find({},{userid:1,nickname:1,_id:0})
{ "userid" : "1001", "nickname" : "Rose" }
{ "userid" : "1002", "nickname" : "alonzo" }
{ "userid" : "1005", "nickname" : "leijun" }
{ "userid" : "mifans", "nickname" : "alonzo" }
{ "userid" : "1003", "nickname" : "zhangsan" }
{ "userid" : "1003", "nickname" : "zhangsan" }
實(shí)際上投影查詢就是查詢表中的列可以理解為db.comment.find({行篩選},{列篩選})
行篩選需要指定具體數(shù)據(jù),列篩選指定0和1,0為不顯示,1為顯示
- 由于批量插入數(shù)據(jù)較多容易出現(xiàn)失敗,因此,可以使用try,catch進(jìn)行異常處理,測(cè)試的時(shí)候可以不處理
try {
db.comment.insertMany([{"articleid":"10001","content":"Are you ok","userid":"1002","nickname":"alonzo","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{"articleid":"10001","content":"3q","userid":"1005","nickname":"leijun","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{"articleid":"10001","content":"very match,陽(yáng)光明媚","userid":"mifans","nickname":"alonzo","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{"articleid":"10001","content":"hello mifans","userid":"1003","nickname":"zhangsan","createdatetime":new Date(),"likenum":NumberInt(777),"state":"1"},
{"articleid":"10001","content":"base","userid":"1003","nickname":"zhangsan","createdatetime":new Date(),"likenum":NumberInt(777),"state":"1"}])
} catch (e) {
print(e)
}
目前沒怎么理解這個(gè)功能
4.3 文檔的更新
更新文檔的語(yǔ)法:
db.collection.update(query,update,options)
- 覆蓋的修改
修改userid為1002的記錄,點(diǎn)贊量為1001,輸入以下語(yǔ)句:
> db.comment.update({userid:"1002"},{likenum:NumberInt(1001)})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.comment.find()
{ "_id" : ObjectId("604ad16235ffd35bf6985785"), "likenum" : 1001 }
{ "_id" : ObjectId("604ad16235ffd35bf6985786"), "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 888, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985787"), "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "mifans", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 666, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985788"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985789"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
可以看到這條更新修改把整個(gè)數(shù)據(jù)都給覆蓋了,重新生成了之前修改的部分
- 局部修改
為了解決這個(gè)問題,需要使用$set來(lái)實(shí)現(xiàn),之前添加文檔的時(shí)候細(xì)心的朋友可能發(fā)現(xiàn)有個(gè)userid的值是mifans,這個(gè)是錯(cuò)誤的,現(xiàn)在想把它改為1004,然后nickname改為mifans,命令如下:
> db.comment.update({userid:"mifans"},{$set:{userid:"1004",nickname:"mifans"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.comment.find({userid:"1004"})
{ "_id" : ObjectId("604ad16235ffd35bf6985787"), "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 666, "state" : "1" }
- 批量的修改
更新所有用戶為1003的用戶昵稱為lisi
#默認(rèn)只修改第一條數(shù)據(jù)
> db.comment.update({userid:"1003"},{$set:{nickname:"lisi"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.comment.find({userid:"1003"})
{ "_id" : ObjectId("604ad16235ffd35bf6985788"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "lisi", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985789"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
#修改所有符合條件的數(shù)據(jù)(nickname改為lisi2來(lái)做區(qū)分)
> db.comment.update({userid:"1003"},{$set:{nickname:"lisi2"}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.comment.find({userid:"1003"})
{ "_id" : ObjectId("604ad16235ffd35bf6985788"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985789"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
所以只要后面不加參數(shù){multi:true}則只更新第一條數(shù)據(jù)
- 列值增長(zhǎng)的修改
如果我們想實(shí)現(xiàn)對(duì)某列值在原有值的基礎(chǔ)上的進(jìn)行增加或減少,可以使用$inc運(yùn)算符來(lái)實(shí)現(xiàn)。
下面是對(duì)userid為1003的點(diǎn)贊數(shù)進(jìn)行遞增操作,每次遞增2
> db.comment.find({userid:"1003"})
{ "_id" : ObjectId("604ad16235ffd35bf6985788"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985789"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 777, "state" : "1" }
> db.comment.update({nickname:"lisi2"},{$inc:{likenum:NumberInt(2)}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.comment.find({nickname:"lisi2"})
{ "_id" : ObjectId("604ad16235ffd35bf6985788"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 779, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985789"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 779, "state" : "1" }
4.4 刪除文檔
刪除文檔的語(yǔ)法結(jié)構(gòu):
db.集合名稱.remove(條件)
以下語(yǔ)句可以講數(shù)據(jù)全部刪除,請(qǐng)慎用
db.comment.remove({})
- 如果刪除userid為1003的記錄,輸入以下語(yǔ)句
> db.comment.find()
{ "_id" : ObjectId("604ad16235ffd35bf6985785"), "likenum" : 1001 }
{ "_id" : ObjectId("604ad16235ffd35bf6985786"), "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 888, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985787"), "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 666, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985788"), "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 779, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985789"), "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "lisi2", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 779, "state" : "1" }
> db.comment.remove({userid:"1003"})
WriteResult({ "nRemoved" : 2 })
> db.comment.find()
{ "_id" : ObjectId("604ad16235ffd35bf6985785"), "likenum" : 1001 }
{ "_id" : ObjectId("604ad16235ffd35bf6985786"), "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 888, "state" : "1" }
{ "_id" : ObjectId("604ad16235ffd35bf6985787"), "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-12T02:26:42.644Z"), "likenum" : 666, "state" : "1" }
- 刪除comment里的全部數(shù)據(jù)
> db.comment.remove({})
WriteResult({ "nRemoved" : 3 })
> db.comment.find()
>
5. 文檔的分頁(yè)查詢
首先先將上面刪除的數(shù)據(jù)給創(chuàng)建出來(lái)
#創(chuàng)建初始數(shù)據(jù)
try {
db.comment.insertMany([{_id:"1","articleid":"10001","content":"Are you ok","userid":"1002","nickname":"alonzo","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{_id:"2","articleid":"10001","content":"3q","userid":"1005","nickname":"leijun","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{_id:"3","articleid":"10001","content":"very match,陽(yáng)光明媚","userid":"1004","nickname":"mifans","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{_id:"4","articleid":"10001","content":"hello mifans","userid":"1003","nickname":"zhangsan","createdatetime":new Date(),"likenum":NumberInt(777),"state":"1"},
{_id:"5","articleid":"10001","content":"base","userid":"1003","nickname":"zhangsan","createdatetime":new Date(),"likenum":NumberInt(777),"state":"1"}])
} catch (e) {
print(e)
}
#查詢一下
> db.comment.find()
{ "_id" : "1", "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
{ "_id" : "3", "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 666, "state" : "1" }
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
5.1 統(tǒng)計(jì)查詢
統(tǒng)計(jì)查詢使用count方法,語(yǔ)法如下
db.comment.count(query,option)
- 例如統(tǒng)計(jì)comment中所有記錄數(shù):
> db.comment.count()
5
- 統(tǒng)計(jì)userid為1003的記錄數(shù)
> db.comment.count({userid:"1003"})
2
5.2 分頁(yè)列表查詢
可以使用limit()方法來(lái)讀取指定數(shù)量的數(shù)據(jù),使用skip()方法來(lái)跳過(guò)指定數(shù)量的數(shù)據(jù)
基本語(yǔ)法如下所示:
db.集合名.find().limit().skip()
- 返回指定條數(shù)的記錄,可以在find方法后調(diào)用limit來(lái)返回結(jié)果(TopN),默認(rèn)值20,如下查看前三條數(shù)據(jù):
> db.comment.find().limit(3)
{ "_id" : "1", "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
{ "_id" : "3", "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 666, "state" : "1" }
- skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過(guò)記錄條數(shù),即前N個(gè)不要,默認(rèn)值是0,如下查詢時(shí)跳過(guò)前三條數(shù)據(jù):
> db.comment.find().skip(3)
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
- 分頁(yè)查詢:要求:每頁(yè)兩個(gè),第二頁(yè)開始:跳過(guò)前兩條數(shù)據(jù),接著顯示3和4條數(shù)據(jù),以此類推
#顯示第一頁(yè),每頁(yè)兩條數(shù)據(jù)
> db.comment.find().skip().limit(2)
{ "_id" : "1", "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
#顯示第二頁(yè),每頁(yè)兩條數(shù)據(jù)
> db.comment.find().skip(2).limit(2)
{ "_id" : "3", "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 666, "state" : "1" }
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
#顯示第三頁(yè),每頁(yè)兩條數(shù)據(jù)
> db.comment.find().skip(4).limit(2)
{ "_id" : "5", "articleid" : "10001", "content" : "base", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
可以看到顯示第三頁(yè)的時(shí)候數(shù)據(jù)不足兩條,則只返回一條
5.3 排序查詢
sort()方法對(duì)數(shù)據(jù)進(jìn)行排序,sort()方法可以通過(guò)參數(shù)指定排序字段,并使用1和-1來(lái)指定排序的方式,其中1為升序排序,-1為降序排序
語(yǔ)法如下:
db.集合名.find().sort({KEY1:1,KEY2:-1})
- 對(duì)userid升序排序,并對(duì)點(diǎn)贊數(shù)進(jìn)行降序排序
> db.comment.find({},{userid:1,likenum:1}).sort({userid:1,likenum:-1})
{ "_id" : "1", "userid" : "1002", "likenum" : 1000 }
{ "_id" : "4", "userid" : "1003", "likenum" : 777 }
{ "_id" : "5", "userid" : "1003", "likenum" : 777 }
{ "_id" : "3", "userid" : "1004", "likenum" : 666 }
{ "_id" : "2", "userid" : "1005", "likenum" : 888 }
這里數(shù)據(jù)降序看不出來(lái),理論上userid為1003的那兩個(gè)數(shù)據(jù)likenum會(huì)進(jìn)行降序排列
6. 文檔的更多查詢
6.1正則的復(fù)雜條件查詢
Mongodb的模糊查詢是通過(guò)正則表達(dá)式的方式實(shí)現(xiàn)的,格式為:
db.集合名.find({字段:/正則表達(dá)式/})
提示:正則是js的語(yǔ)法
- 現(xiàn)在要查詢?cè)u(píng)論內(nèi)容包含“陽(yáng)光明媚”的所有文檔
#因?yàn)樯厦鎰?chuàng)建的文檔只有一條記錄有“陽(yáng)光明媚”,所以再更新其他一條讓它有兩條該數(shù)據(jù),方便我們查詢
> db.comment.update({_id:"5"},{$set:{content:"base,陽(yáng)光明媚"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.comment.find({_id:"5"})
{ "_id" : "5", "articleid" : "10001", "content" : "base,陽(yáng)光明媚", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
#查詢?cè)u(píng)論中包含“陽(yáng)光明媚”的所有文檔
> db.comment.find({content:/陽(yáng)光明媚/})
{ "_id" : "3", "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 666, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base,陽(yáng)光明媚", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
- 查詢以數(shù)字開頭的評(píng)論
> db.comment.find({content:/^[0-9]/})
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
6.2 比較查詢
<,<=,>,>=這些操作符也是很常用的,格式如下:
db.集合名.find({字段:{$gt:數(shù)值}}) #大于
db.集合名.find({字段:{$lt:數(shù)值}}) #小于
db.集合名.find({字段:{$gte:數(shù)值}}) #大于等于
db.集合名.find({字段:{$lte:數(shù)值}}) #小于等于
db.集合名.find({字段:{$ne:數(shù)值}}) #不等于
- 查詢?cè)u(píng)論點(diǎn)贊數(shù)大于700的記錄
> db.comment.find({likenum:{$gt:700}})
{ "_id" : "1", "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base,陽(yáng)光明媚", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
6.3 包含查詢
包含使用$in操作符
- 查詢?cè)u(píng)論的集合中userid字段包含1003和1004的文檔
> db.comment.find({userid:{$in:["1003","1004"]}})
{ "_id" : "3", "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 666, "state" : "1" }
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base,陽(yáng)光明媚", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
- 不包含使用$nin操作符
查詢?cè)u(píng)論集合中userid字段不包含1003和1004的文檔
> db.comment.find({userid:{$nin:["1003","1004"]}})
{ "_id" : "1", "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
6.4 條件連接查詢
我們?nèi)绻枰樵兺瑫r(shí)滿足兩個(gè)以上條件,需要使用$and操作符進(jìn)行關(guān)聯(lián)。(相當(dāng)于SQL里的and)
格式為:
db.集合名.find({$and:[{ },{ },{ }]})
- 查詢?cè)u(píng)論集合中l(wèi)ikenum大于等于700且小于2000的記錄
> db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})
{ "_id" : "1", "articleid" : "10001", "content" : "Are you ok", "userid" : "1002", "nickname" : "alonzo", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 1000, "state" : "1" }
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base,陽(yáng)光明媚", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
如果兩個(gè)以上條件之間是或者的關(guān)系,我們使用操作符進(jìn)行關(guān)聯(lián),與前面and的使用方式相同格式為:
db.集合名.find({$or:[{ },{ },{ }]})
查詢?cè)u(píng)論集合中userid為1003,或者點(diǎn)贊數(shù)小于1000的文檔記錄:
> db.comment.find({$or:[{userid:"1003"},{likenum:{$lt:NumberInt(1000)}}]})
{ "_id" : "2", "articleid" : "10001", "content" : "3q", "userid" : "1005", "nickname" : "leijun", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 888, "state" : "1" }
{ "_id" : "3", "articleid" : "10001", "content" : "very match,陽(yáng)光明媚", "userid" : "1004", "nickname" : "mifans", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 666, "state" : "1" }
{ "_id" : "4", "articleid" : "10001", "content" : "hello mifans", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
{ "_id" : "5", "articleid" : "10001", "content" : "base,陽(yáng)光明媚", "userid" : "1003", "nickname" : "zhangsan", "createdatetime" : ISODate("2021-03-14T02:39:11.573Z"), "likenum" : 777, "state" : "1" }
7. 常用命令小結(jié)
選擇切換數(shù)據(jù)庫(kù):use articledb
插入數(shù)據(jù):db.comment.insert({bson數(shù)據(jù)})
查詢所有數(shù)據(jù):db.comment.find()
條件查詢數(shù)據(jù):db.comment.find({條件})
查詢符合條件的第一條記錄:db.comment.findOne({條件})
查詢符合條件的前n條數(shù)據(jù):db.comment.find.({條件}).limit(n)
查詢第n條數(shù)據(jù)后的數(shù)據(jù):db.comment.find({條件}).skip(n)
修改數(shù)據(jù):db.comment.update({條件},{修改后的數(shù)據(jù)})或者db.comment.update({條件},{$set:{修改后的數(shù)據(jù)}})
修改數(shù)據(jù)并自增某字段的值:db.comment.update({條件},{$inc:{自增的字段:步數(shù)}})
刪除數(shù)據(jù):db.comment.remove({條件})
統(tǒng)計(jì)數(shù)據(jù):db.comment.count({條件})
模糊查詢:db.comment.find({字段名:/正則表達(dá)式/})
條件比較查詢:db.comment.find({字段名:{$gt:值}})
包含查詢:db.comment.find({字段名:{$in:[值1,值2]}})
條件連接查詢:db.comment.find({$and:[{條件1},{條件2}]})