mongodb基本命令

關(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}]})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.創(chuàng)建數(shù)據(jù)庫(kù)取名 這里我以testdb1命名use testdb12.查看數(shù)據(jù)庫(kù)show dbs發(fā)現(xiàn)并沒有剛才創(chuàng)...
    A430閱讀 302評(píng)論 0 0
  • 1.啟動(dòng)mongoDB mongod --dbpath E:\mongoDB\data\db 另開一個(gè)命令行,cd...
    勾勾GO閱讀 495評(píng)論 0 1
  • 成功啟動(dòng)MongoDB后,再打開一個(gè)命令行窗口輸入mongo,就可以進(jìn)行數(shù)據(jù)庫(kù)的一些操作。 輸入help可以看到基...
    你本來(lái)就很牛閱讀 28,790評(píng)論 0 3
  • Version:1.0StartHTML:000000207EndHTML:000017268StartFragm...
    你可別搞黃she嗷閱讀 412評(píng)論 1 2
  • 一、數(shù)據(jù)庫(kù)常用命令1、Help查看命令提示 復(fù)制代碼 代碼如下: helpdb.help();db.yourCol...
    字伯約閱讀 434評(píng)論 0 0

友情鏈接更多精彩內(nèi)容