日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

芒果db的基本操作

發(fā)布時(shí)間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 芒果db的基本操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

芒果數(shù)據(jù)庫(kù)

芒果數(shù)據(jù)庫(kù)是NOSQL的一種,是一種面向文檔的數(shù)據(jù)庫(kù),介于結(jié)構(gòu)化數(shù)據(jù)庫(kù)和非結(jié)構(gòu)數(shù)據(jù)庫(kù)的一種,它的數(shù)據(jù)結(jié)構(gòu)非常松散,也非常靈活

優(yōu)點(diǎn)

  • 面向文檔存儲(chǔ)(類JSON數(shù)據(jù)模式簡(jiǎn)單而強(qiáng)大)

  • 動(dòng)態(tài)查詢

  • 全索引支持,擴(kuò)展到內(nèi)部對(duì)象和內(nèi)嵌數(shù)組

  • 查詢記錄分析

  • 快速,就地更新

  • 高效存儲(chǔ)二進(jìn)制大對(duì)象 (比如照片和視頻)

  • 復(fù)制和故障切換支持

  • Auto- Sharding自動(dòng)分片支持云級(jí)擴(kuò)展性

  • MapReduce 支持復(fù)雜聚合

  • 商業(yè)支持,培訓(xùn)和咨詢

缺點(diǎn)

  • 不支持事務(wù)(進(jìn)行開(kāi)發(fā)時(shí)需要注意,哪些功能需要使用數(shù)據(jù)庫(kù)提供的事務(wù)支持)

  • MongoDB占用空間過(guò)大 (不過(guò)這個(gè)確定對(duì)于目前快速下跌的硬盤(pán)價(jià)格來(lái)說(shuō),也不算什么缺點(diǎn)了)

  • MongoDB沒(méi)有如MySQL那樣成熟的維護(hù)工具,這對(duì)于開(kāi)發(fā)和IT運(yùn)營(yíng)都是個(gè)值得注意的地方

  • 在32位系統(tǒng)上,不支持大于2.5G的數(shù)據(jù)(很多操作系統(tǒng)都已經(jīng)拋棄了32位版本,所以這個(gè)也算不上什么缺點(diǎn)了,3.4版本已經(jīng)放棄支持32 位 x86平臺(tái))

    數(shù)據(jù)存儲(chǔ)階段

    文件管理階段(.txt .doc .xls)

    優(yōu)點(diǎn) : 使用簡(jiǎn)單方便 數(shù)據(jù)能夠長(zhǎng)期保存 可以存儲(chǔ)大量數(shù)據(jù)

    缺點(diǎn) : 數(shù)據(jù)一致性差 數(shù)據(jù)的查找修改不方便 數(shù)據(jù)冗余

    數(shù)據(jù)庫(kù)管理階段

    優(yōu)點(diǎn) : 數(shù)據(jù)組織結(jié)構(gòu)化,降低冗余 提高增刪改查效率 方便擴(kuò)展 方便程序調(diào)用,做自動(dòng)化的處理 缺點(diǎn) : 數(shù)據(jù)庫(kù)使用特定的語(yǔ)句操作,相對(duì)復(fù)雜

mysql 和 mongodb 概念比價(jià)

mysql mongodb 含義

database database 數(shù)據(jù)庫(kù)

table collection 表/集合

column field 字段/域

row document 記錄/文檔

index index 索引

操作

啟動(dòng)

雙擊mongo.exe

查看當(dāng)前系統(tǒng)中的數(shù)據(jù)庫(kù)

show dbs

系統(tǒng)數(shù)據(jù)庫(kù): admin:存放用戶及其權(quán)限 local: 存儲(chǔ)本地?cái)?shù)據(jù) config:存儲(chǔ)分片信息

使用指定數(shù)據(jù)庫(kù)

use 庫(kù)名

創(chuàng)建庫(kù)

use str

剛創(chuàng)建不會(huì)成功,只有使用,才會(huì)成功

db.createCollection("class1")

刪除庫(kù)

db.dropDatabase()

刪除db代表的數(shù)據(jù)庫(kù)

創(chuàng)建集合

db.createCollection(collection_name)

創(chuàng)建一個(gè)class1的集合

例: db.createCollection("class1")

當(dāng)向一個(gè)集合中插入數(shù)據(jù)的時(shí)候,如果這個(gè)集合不存在則會(huì)自動(dòng)創(chuàng)建

例: db.class2.insert({"name":'Tom','age':17,'sex':'m'})

查看數(shù)據(jù)庫(kù)中的集合

方式一:show collections

方式二:show tables

刪除集合

db.collectionName.drop()

列: db.class1.drop()

集合的重命名

db.collectionName.renameCollection("new_name")

列:db.class2.renameCollection("class1")

文檔

mongodb中數(shù)據(jù)的組織形式--》文檔

芒果db文檔:以鍵值對(duì)形式組成的類似字典的數(shù)據(jù)結(jié)構(gòu)

鍵:即文檔的域

鍵的命名規(guī)則: \1. utf-8字符串 \2. 不含有'\0' 通常不用 . $ \3. 一個(gè)文檔中的鍵不能重復(fù)

* 文檔中的鍵值對(duì)是有序的 * mongodb中數(shù)據(jù)嚴(yán)格區(qū)分大小寫(xiě)

值:即文檔存儲(chǔ)的數(shù)據(jù),支持bson數(shù)據(jù)

JavaScript ---》 json ---》bson

類型 值

整型 整數(shù) 布爾類型 true false 浮點(diǎn)型 小數(shù) Array 數(shù)組 Timestamp 時(shí)間戳 Date 時(shí)間日期 Object 內(nèi)部文檔 Null 空值 null String 字符串 Symbol 特殊字符串 Binary data 二進(jìn)制字串 code 代碼 regex 正則表達(dá)式 ObjectId ObjectId字串

"_id" : ObjectId("5b503b7f38d0e992e1270560")

_id : 當(dāng)在mongo代表中插入文檔時(shí),如果不指定id則會(huì)自動(dòng)添加這個(gè)域,作為主鍵。

ObjectId() 值是系統(tǒng)自動(dòng)生成的不重復(fù)字串標(biāo)識(shí)

24位 8位 文檔創(chuàng)建時(shí)間 6位 機(jī)器ID 4位 進(jìn)程ID 6位 計(jì)數(shù)器

集合中的文檔:

集合中的文檔: \1. 集合中的文檔不一定有相同的域 \2. 集合中的文檔多少不一定相同 \3. 集合中的文檔,值的類型不一定相同

集合設(shè)計(jì) \1. 集合中的文檔盡可能描述同一類數(shù)據(jù) \2. 同一類數(shù)據(jù)不要過(guò)多分散在多個(gè)集合中存放 \3. 集合中文檔的結(jié)構(gòu)層次不宜過(guò)多

插入文檔

插入單個(gè)文檔

db.collectionName.insert()

例:db.class0.insert({name:"HanMei",age:17,sex:'w'})

查看插入結(jié)果

db.class0.find()

* 插入數(shù)據(jù)時(shí)域名可以不加引號(hào) * 查看插入結(jié)果 db.class.find() * id 為系統(tǒng)自動(dòng)添加主鍵,如果自己寫(xiě)id則為自己設(shè)定的值,但是仍然不可重復(fù) * 一個(gè)集合中的文檔是有序的

插入多個(gè)文檔

db.collectionName.insert([{},{},{}])

例:db.class2.insert([{name:'阿寶',age:32},{name:'阿哲',age:31},{name:'阿蓉',age:26}])

查看插入結(jié)果

db.class2.find()

save() 插入文檔 save() 也可以用來(lái)插入多條數(shù)據(jù) 如果正常插入與insert相同 當(dāng)插入指定_id值重復(fù)的數(shù)據(jù)時(shí)save()可以對(duì)原數(shù)據(jù)進(jìn)行修改,但是insert()會(huì)報(bào)錯(cuò)

使用save插入

db.collectionName.save()

例:db.class1.save({name:'Lily',age:13,sex:'w'})

查看插入結(jié)果

db.class1.find()

* 如果不加id域時(shí)用法同insert() * 如果加id,此_id值存在則save表示修改該文檔。

MongoDB 文檔型數(shù)據(jù)庫(kù)總結(jié)

創(chuàng)建數(shù)據(jù)庫(kù): use database 刪除數(shù)據(jù)庫(kù): db.dropDatabase()

創(chuàng)建集合: db.createCollection() db.collection.insert() 刪除集合: db.collection.drop() 重命名 : db.collection.renameCollection()

查看數(shù)據(jù)庫(kù)

查看數(shù)據(jù)庫(kù): show dbs

查看集合

查看集合: show collections show tables

文檔

www.mongodb.com --> docs 查找文檔幫助

插入文檔 : insert() save()

獲取集合對(duì)象

db.getCollection('class1') ===》 db.class1

插入數(shù)據(jù)

db.getCollection('class1').insert({name:'Marry',age:16,sex:'w'})

查找操作

mysql : select ... from table where ....

mongo : db.collection.find(query,field)

查找所有內(nèi)容 db.collection.find() ----> select * from table

find(query,field) 功能 : 查找數(shù)據(jù) 參數(shù) : query: 篩選條件,相當(dāng)于where子句 field: 選定要展示的域 返回值 : 返回查找到的文檔

query : 以鍵值對(duì)形式給出篩選條件 {name:'Lily'}

查找所有內(nèi)容

db.collection.find(query,field)

查找所有

例: db.class1.find()

按條件查找

例:db.class1.find({name:'Lily'})

field : 以鍵值對(duì)的形式給出要展示(不展示)的域,域名為鍵,值為1表示展示,0表示不展示

* 如果某個(gè)域設(shè)置為0則表示不展示該域其他的均展示 * 如果某個(gè)域設(shè)置為1則表示展示該域其他的均不展示 * id必須設(shè)置為0才不會(huì)顯示 * 除了id其余設(shè)置的值必須相同

以鍵值對(duì)形式展示

db.class1.find({name:'Lily'},{_id:0,name:1,age:1})

db.class1.find({name:'Lily'},{_id:0,name:1})

db.class1.find({name:'Lily'},{_id:0})

0是該域不展示,其他均展示

1是該域展示,其他不展示

只查找第一條符合條件的文檔

findOne(query,field)

參數(shù)返回值同find()

例: db.class1.findOne({sex:'w'},{_id:0})

query 更多篩選功能

操作符:使用$符號(hào)標(biāo)注的一個(gè)有特殊意義的字符串。用以表達(dá)一定的含義。比如 $lt 表示小于

比較操作符

$eq 等于 =

例:db.class1.find({age:{$eq:13}},{_id:0})

db.class1.find({age:13},{_id:0})

$lt 小于 <

例:db.class1.find({age:{$lt:15}},{_id:0})

* 字符串也可以比較大小

$lte 小于等于 <=

小于等于15

例:db.class1.find({age:{$lte:15}},{_id:0})

$gt 大于 >

大于15 db.class1.find({age:{$gt:15}},{_id:0})

$gte 大于等于 >=

大于等于15 db.class1.find({age:{$gte:15}},{_id:0})

$ne 不等于 !=

不等于13 db.class1.find({age:{$ne:13}},{_id:0})

* 如果某個(gè)文檔不存在查找的域,則不等于可以匹配到該文檔

$in 包含

年齡包含 在11,12,13,14的

db.class1.find({age:{$in:[11,12,13,14]}},{_id:0})

$nin 不包含

年齡不是13,14 db.class1.find({age:{$nin:[13,14]}},{_id:0})

邏輯操作符

query 逗號(hào)分隔的條件即為與關(guān)系

,表示關(guān)系

年齡大于13 小于16

db.class1.find({age:{$gt:13,$lt:16}},{_id:0})

年齡大于13且性別為女

db.class1.find({age:{$gt:13},sex:'w'},{_id:0})

$and 邏輯與

年齡大于13 并且姓名大于Lily

db.class1.find({$and:[{age:{$gt:13}},{name:{$lt:'Lily'}}]},{_id:0})

$or 邏輯或

年齡大于15或者為男生

$not 邏輯非

年齡不大于15

db.class1.find({age:{$not:{$gt:15}}},{_id:0})

$nor 既不也不

既不大于16 也不是女生

db.class1.find({$nor:[{age:{$gt:16}},{sex:'w'}]},{_id:0})

條件混合

年齡大于16并且為男生 或者 年齡小于14

db.class1.find({$or:[{age:{$gt:16},sex:'m'},{age:{$lt:14}}]},{_id:0})

年齡大于16或者為女生 并且 姓名大于 Jame

db.class1.find({name:{$gt:'Jame'},$or:[{age:{$gt:16}},{sex:'w'}]},{_id:0})

數(shù)組

[1,2,3,4]

數(shù)組查找

查看數(shù)據(jù)中是否包含某一項(xiàng)

如果score數(shù)組中包含67即可

db.class3.find({score:67},{id:0}) db.class3.find({score:{$gt:90}},{id:0})

$all

查看數(shù)據(jù)中同時(shí)包含多項(xiàng)

同時(shí)包含64 75

db.class3.find({score:{$all:[64,75]}},{_id:0})

$size

通過(guò)數(shù)組元素個(gè)數(shù)查找

db.class3.find({score:{$size:3}},{_id:0})

$slice

取出數(shù)組的部分進(jìn)行顯示 放在field中

顯示數(shù)組中前兩項(xiàng) db.class3.find({},{id:0,score:{$slice:2}})

跳過(guò)第一項(xiàng)顯示后面一項(xiàng) db.class3.find({},{id:0,score:{$slice:[1,1]}})

其他查找方法

$exists

判斷一個(gè)域是否存在

查找存在age域的文檔

db.class1.find({age:{$exists:true}},{_id:0} )

true 表示有這個(gè)域 false表示篩選無(wú)這個(gè)域

$mod

余數(shù)查找

查找除以2余數(shù)為1的 db.class1.find({age:{$mod:[2,1]}},{_id:0} )

$type

找出值為指定類型的文檔

查找age數(shù)據(jù)類型為1的文檔 db.class1.find({age:{$type:1}},{_id:0} )

具體數(shù)字和類型的匹配 Type Number Double 1 String 2 Object 3 Array 4 Binary data 5 ObjectId 7 Boolean 8 Date 9 Null 10 RE 11 Symbol 14 32-bit integer 16 Timestamp 17 64-bit integer 18

查找結(jié)果相關(guān)函數(shù)

distinct()

功能:查看集合某個(gè)域的取值范圍

查看集合中age域值的范圍 db.class1.distinct("age")

pretty()

功能: 格式化顯示查找結(jié)果

db.class1.find().pretty()

limit(n)

功能: 顯示查找結(jié)果的前n條

顯示查找結(jié)果的前三條 db.class1.find({},{_id:0}).limit(3)

skip(n)

功能 : 跳過(guò)前n條顯示

跳過(guò)前三條顯示后邊的內(nèi)容 db.class1.find({},{_id:0}).skip(3)

count()

功能 : 計(jì)數(shù)統(tǒng)計(jì)

統(tǒng)計(jì)男生數(shù)量 db.class1.find({sex:'m'},{_id:0}).count()

sort({域:1/-1})

功能 : 對(duì)查找結(jié)果排序 參數(shù) : 以鍵值對(duì)的形式給出 1 表示按照升序排序, -1表示降序排序

按照年齡升序 db.class1.find({},{_id:0}).sort({age:1})

復(fù)合排序:當(dāng)?shù)谝慌判蝽?xiàng)相同時(shí)比較第二排序項(xiàng)

db.class0.find({},{_id:0}).sort({age:1,name:1})

函數(shù)的連續(xù)調(diào)用 當(dāng)函數(shù)返回文檔集合時(shí)還可以繼續(xù)調(diào)用函數(shù)

查找班級(jí)年齡最大的三個(gè) db.class1.find({},{_id:0}).sort({age:-1}).limit(3)

文檔的刪除操作

delete from table where ...

db.collection.remove(query,justOne) 功能 : 刪除文檔 參數(shù) : query 篩選要?jiǎng)h除的文檔 相當(dāng)于where 用法同查找 justOne : 布爾值,默認(rèn)為false 表示刪除所有。如果設(shè)置為true 只刪除第一條符合條件的文檔。

例子:db.class2.remove({name:"阿蓉"})

justOne為true則只刪除第一條符合條件的

例:db.class0.remove({age:17},true)

刪除集合中所有文檔

刪除class2中所有文檔 db.class2.remove({})

練習(xí) :

\1. 創(chuàng)建數(shù)據(jù)庫(kù) 名字 grade use grade \2. 數(shù)據(jù)庫(kù)中創(chuàng)建集合 class \3. 集合中插入文檔,格式如下 {name:'zhang',age:10,sex:'m',hobby:['a','b']} age范圍 4-15 hobby 范圍 [draw dance sing pingpong basketball football running computer]

\4. 查找練習(xí) 查看班級(jí)所有人信息 db.class.find({},{_id:0})

查看班級(jí)年齡8歲的同學(xué)信息 db.class.find({age:8},{id:0}) 查看年齡大于10歲的學(xué)生信息 db.class.find({age:{$gt:10}},{id:0}) 查看年齡在8-11歲之間的學(xué)生信息 db.class.find({$and:[{age:{$gt:8}},{age:{$lt:11}}]},{_id:0})

查看年齡為9歲且為男生的學(xué)生 db.class.find({age:9,sex:'m'},{_id:0})

找到年齡小于7歲或大于12歲的學(xué)生 db.class.find({$or:[{age:{$lt:7}},age:{$gt:12}],{id:0}) 找到年齡為8歲或者11歲的學(xué)生 db.class.find({$or:[{age:8},{age:11}]},{id:0}) db.class.find({age:{$in:[8,11]}})

找到有兩項(xiàng)興趣愛(ài)好的學(xué)生 db.class.find({hebby:{$size:2}},{_id:0})

找到興趣中有draw的學(xué)生 db.class.find({hebby:draw},{_id:0})

找喜歡畫(huà)畫(huà)又喜歡跳舞的學(xué)生 db.class.find({hebby:{$all:['draw','dance']}})

統(tǒng)計(jì)興趣有三項(xiàng)的學(xué)生人數(shù) db.class.find({hebby:{%size:3}}).count

找到本班年齡第二大的同學(xué) db.class.sort({age:-1}).skip(1).limit(1)

查看本班學(xué)生興趣愛(ài)好涵蓋哪些方面 db.class.distinct('hebby')

找到年齡最大的三個(gè)同學(xué) db.class.sort({age:-1}).limit(3)

\5. 刪除所有年齡大于12或者小于7歲的同學(xué)除非他的愛(ài)好有三項(xiàng)以上 db.class.remove({$and:[{$or:[{age:{$gt:12}},{age:{$lt:7}}]},{hebby:{$size:{$lt:3}}}]}

修改操作

update table set ... where ...

db.collection.update(query,update,upsert,multi) 功能 : 修改文檔 參數(shù) : query : 篩選需要修改的文檔,相當(dāng)where 用法同查找 update: 要修改什么內(nèi)容 相當(dāng)set。往往需要配合修改操作符 upsert:bool值 默認(rèn)false 如果query的文檔不存在則不做操作 設(shè)置為true 則如果文檔不存在根據(jù)query和update內(nèi)容插入新文檔 multi: bool值 默認(rèn)false 如果篩選到多條文檔則只修改第一條。 設(shè)置為true則表示修改所有篩選到的文檔

e.g. 年齡修改為18 db.class0.update({name:'HanMei'},{$set:{age:18}})

e.g. 如果篩選內(nèi)容不存在則插入 db.class0.update({name:'Jame'},{$set:{age:18}},true)

e.g. 如果匹配到多條,則修改所有 db.class0.update({sex:'w'},{$set:{name:'小芳'}},false,true)

第三天

復(fù)習(xí) :

\1. 查找操作 find(query,field) findOne()

操作符 : 比較 $lt $lte $gt $gte $ne $eq $in $nin 邏輯 $and $or $not $nor

數(shù)組 $all $size

其他 $exists $mod $type

\2. 函數(shù) : pretty() limit() skip() sort() count() 其他函數(shù): distinct() getCollection()

\3. 刪除文檔 remove(query,justOne) remove({})

\4. 修改操作 update(query,update,upsert,multi)

==================================================

修改操作符

$set 修改一個(gè)域的值,或者增加一個(gè)域

e.g. 修改功能 如果該域不存在則增加這個(gè)域 db.class0.update({age:20},{$set:{name:'小薇'}})

$unset 刪除一個(gè)域

e.g. sex后面為空表示刪除一個(gè)域 db.class0.update({name:'Jame'},{$unset:{sex:''}})

$rename 修改一個(gè)域的名稱

e.g. 將sex域名修改為gender db.class0.update({},{$rename:{sex:'gender'}},false,true)

$setOnInsert 如果update執(zhí)行了插入文檔操作,表示補(bǔ)充插入內(nèi)容

e.g. 如果執(zhí)行插入操作則將setOnInsert中內(nèi)容也插入 db.class0.update({name:'Tom'},{$set:{age:17},$setOnInsert:{gender:'m',tel:'12345'}},true) 00 * 在update參數(shù)中可以同時(shí)寫(xiě)多個(gè)修改器

$inc

加減修改器

e.g. 所有人年齡增加1 db.class0.update({},{$inc:{age:1}},false,true)

* $inc值可以是正數(shù)負(fù)數(shù)整數(shù)小數(shù)

$mul

乘法修改器

e.g. Tom年齡 乘以2 db.class0.update({name:'Tom'},{$mul:{age:2}})

* $mul值可以是正數(shù)負(fù)數(shù)整數(shù)小數(shù)

$max

指定了某個(gè)域值的下限,如果小于指定值則修改為指定值

e.g. 將年齡不到20的修改為20 db.class0.update({},{$max:{age:20}},false,true)

$min

指定了某個(gè)域值的上限,如果大于指定值則修改為指定值

e.g. 年齡大于25的修改為25 db.class0.update({},{$min:{age:25}},false,true)

數(shù)組修改器

$push 向數(shù)組中添加一項(xiàng)

e.g. db.class3.update({name:'小明'},{$push:{score:5}})

$pushAll 向數(shù)組中添加多項(xiàng)

e.g. db.class3.update({name:'小紅'},{$pushAll:{score:[5,10]}})

$pull 從數(shù)組中刪除一項(xiàng)

e.g. db.class3.update({name:'小紅'},{$pull:{score:10}})

*數(shù)組可以有重復(fù)值,如果刪除則會(huì)把所有指定的值都刪除

$pullAll 刪除數(shù)組中多項(xiàng)

e.g. db.class3.update({name:'小明'},{$pullAll:{score:[67,5]}})

$each 對(duì)多個(gè)值逐一操作

e.g. db.class3.update({name:'小明'},{$push:{score:{$each:[5,10]}}})

$position 指定插入位置

e.g. 需要搭配$each使用,將數(shù)據(jù)從1號(hào)位置插入 db.class3.update({name:'小紅'},{$push:{score:{$each:[10],$position:1}}})

$sort 對(duì)數(shù)組進(jìn)行排序

e.g. 和each一起使用,對(duì)數(shù)組score進(jìn)行排序 db.class3.update({name:'小紅'},{$push:{score:{$each:[],$sort:1}}})

$pop 彈出一項(xiàng)

e.g. 1表示彈出最后一項(xiàng) -1表示刪除第一項(xiàng) db.class3.update({name:'小紅'},{$pop:{score:-1}})

$addToSet 向數(shù)組中添加一項(xiàng),不能和已有的內(nèi)容重復(fù)

e.g. 添加87,不能和已有數(shù)據(jù)重復(fù) db.class3.update({name:'小紅'},{$addToSet:{score:87}})

時(shí)間類型

mongodb中存儲(chǔ)時(shí)間格式 : ISODate()

方法1 : new Date() 自動(dòng)生成當(dāng)前時(shí)間

e.g. db.class2.insert({title:'Python入門',date:new Date()})

方法2 : ISODate() 生成當(dāng)前時(shí)間

e.g. db.class2.insert({title:'Python精通',date:ISODate()})

方法3 Date() 將生成的當(dāng)前時(shí)間變?yōu)樽址鎯?chǔ)

e.g. db.class2.insert({title:'Python瘋狂',date:Date()})

ISODate()

功能 : 生成時(shí)間類型存儲(chǔ) 參數(shù) : 參數(shù)指定時(shí)間 "2018-07-01 12:10:56" "20180701 12:10:56" "20180701"

e.g. db.class2.insert({title:'Python崩潰',date:ISODate("2018-07-01 01:12:12")})

時(shí)間戳

valueOf() 將時(shí)間轉(zhuǎn)換為時(shí)間戳

e.g. db.class2.insert({title:'Python放生',date:ISODate().valueOf()})

Null ----》 null

\1. 如果某個(gè)域存在卻沒(méi)有值,可以設(shè)置為null

e.g. db.class2.insert({title:'Python涅槃',price:null})

\2. 如果某個(gè)域不存在可以使用null匹配

e.g. 找到date域不存在的文檔 db.class2.find({date:null},{_id:0})

Object 內(nèi)部文檔

文檔內(nèi)某個(gè)域的值還是一個(gè)文檔,則這個(gè)文檔為內(nèi)部文檔

* 當(dāng)需要使用內(nèi)部文檔某個(gè)域的時(shí)候,可以使用外部文檔 . 的方法引用內(nèi)部文檔。但是注意此時(shí)需要加引號(hào)

e.g. db.class4.find({'book2.title':'python Web'},{_id:0})

e.g. db.class4.update({'book1.title':'python爬蟲(chóng)'},{$set:{'book1.price':48.8}})

數(shù)組的下標(biāo)引用

* 使用數(shù)組時(shí),可以使用數(shù)組域 . 數(shù)組序列下標(biāo)的方式引用數(shù)組的具體某一項(xiàng)

e.g. db.class3.find({'score.0':98},{_id:0})

e.g. db.class3.update({name:'小明'},{$set:{'score.0':100}})

查找結(jié)果的有序性

即可以對(duì)find的查找結(jié)果使用[]的方式引用具體某一條

e.g. db.class1.find({},{_id:0})[1]

練習(xí) : 使用之前的grade數(shù)據(jù)庫(kù)

\1. 將小紅年齡修改為8歲,興趣愛(ài)好變?yōu)樘璁?huà)畫(huà) {$set:{age:8,hobby:[‘draw’,'dance']}}

\2. 追加小明興趣愛(ài)好 唱歌 {$push:{hobby:'sing'}}

\3. 追加小王興趣愛(ài)好,吹牛,打籃球 {$pushAll:{hobby:['chuiniu','basketball']}}

\4. 小李興趣多了跑步唱歌,但是要確保和之前的不重復(fù) {$addToSet:{hobby:{$each:['running','sing']}}}

\5. 班級(jí)所有人年齡加1 {$inc:{age:1}},false,true

\6. 刪除小明的sex屬性 {$unset:{sex:''}}

\7. 刪除小李的第一個(gè)愛(ài)好 {$pop:{hobby:-1}}

\8. 刪除小紅的興趣畫(huà)畫(huà)和唱歌 {$pullAll:{hobby:['draw','sing']}}

索引

指建立指定鍵值對(duì)及所在文檔中存儲(chǔ)位置的對(duì)照清單。使用索引可以方便我們快速查找,減少遍歷次數(shù),提高查找效率。

mongodb創(chuàng)建索引

ensureIndex()

功能 : 創(chuàng)建索引 參數(shù) : 索引域,索引類別和選項(xiàng)

e.g. 根據(jù)name 創(chuàng)建索引 db.class1.ensureIndex({name:1})

* 1表示正序 -1逆序

查看一個(gè)集合中的索引

db.class1.getIndexes()

* _id是系統(tǒng)自動(dòng)創(chuàng)建的索引

自定義索引名稱

db.class1.ensureIndex({name:1},{name:'name_index'})

刪除索引

dropIndex()

功能 : 刪除索引 參數(shù) : 要?jiǎng)h除的索引,可以是索引名稱或者索引鍵值對(duì)

e.g. db.class1.dropIndex('age_index') e.g. db.class1.dropIndex({name:-1})

dropIndexes() 刪除所有索引 除了_id

e.g. db.class1.dropIndexes()

索引類型

復(fù)合索引 根據(jù)多個(gè)域創(chuàng)建一個(gè)索引

e.g. db.class1.ensureIndex({name:1,age:-1})

數(shù)組和子文檔索引

如果對(duì)某個(gè)域創(chuàng)建索引,值為數(shù)組或者子文檔,則通過(guò)數(shù)組或子文檔進(jìn)行查找時(shí)也是索引查找

覆蓋索引

查找返回的內(nèi)容,僅僅是索引表存儲(chǔ)的內(nèi)容,不需要再去原數(shù)據(jù)庫(kù)查找

唯一索引

創(chuàng)建索引時(shí)希望集合中創(chuàng)建索引的域的值均不重復(fù)

e.g. db.class1.ensureIndex({name:1},{unique:true})

* 創(chuàng)建唯一索引的域的值不可以重復(fù)

稀疏索引(間隙索引)

只針對(duì)有指定域的文檔創(chuàng)建索引表,如果某個(gè)文檔沒(méi)有該域則不做索引處理

e.g. 創(chuàng)建age域的稀疏索引 db.class1.ensureIndex({age:1},{sparse:true})

索引約束 \1. 當(dāng)數(shù)據(jù)發(fā)生更新 ,索引也要隨之更新。影響插入,修改,刪除操作的效率 \2. 索引表也需要占有一定的磁盤(pán)空間

綜上 :當(dāng)數(shù)據(jù)量比較小,或者需要頻繁的進(jìn)行數(shù)據(jù)修改操作而不是查找操作的時(shí)候,不適合創(chuàng)建索引

聚合操作

對(duì)文檔的更高級(jí)的篩選整理統(tǒng)計(jì)

db.collection.aggregate() 功能 : 聚合函數(shù),完成聚合操作 參數(shù) : 聚合條件 ---》 聚合操作符

聚合操作符

$group 分組聚合 需要配合分組統(tǒng)計(jì)操作符使用 $sum : 求和 e.g. db.class1.aggregate({$group:{_id:'$sex', 分組 按sex內(nèi)容分組 num: {$sum:1}}}) 自定義統(tǒng)計(jì)域 統(tǒng)計(jì)什么

e.g. 統(tǒng)計(jì)所有男生和女生的年齡之和 db.class1.aggregate({$group:{_id:'$sex',num:{$sum:'$age'}}})

$avg 求平均 e.g. 求每個(gè)性別的平均年齡 db.class1.aggregate({$group:{_id:'$sex',num:{$avg:'$age'}}})

$max 求最大值 e.g. 求每組年齡的最大值 db.class1.aggregate({$group:{_id:'$sex',max:{$max:'$age'}}})

$min 求最小值

e.g. 求每組年齡的最小值 db.class1.aggregate({$group:{_id:'$sex',min:{$min:'$age'}}})

$project 用于修改文檔的顯示效果

e.g. db.class1.aggregate({$project:{_id:0,sex:0}})

e.g. 指定顯示域名 db.class1.aggregate({$project:{_id:0,Name:'$name',Age:'$age'}})

$match 過(guò)濾數(shù)據(jù)

e.g. 過(guò)濾年齡大于16的 db.class1.aggregate({$match:{age:{$gt:16}}})

作業(yè) : 熟練mongodb增刪改查操作 熟練 索引操作

第四天

復(fù)習(xí):

\1. 數(shù)據(jù)的修改 update(query,update,upsert,multi)

修改器 : $set $unset $rename $setOnInsert $inc $mul $max $min $push $pushAll $pull $pullAll $each $position $sort $addToSet $pop

時(shí)間類型 : new Date() ISODate() Date() valueOf()

null : 作為一個(gè)域的值,或者表示一個(gè)域不存在

內(nèi)部文檔 :通過(guò) . 獲取內(nèi)部文檔某個(gè)域的值

索引操作: ensureIndex({},{}) dropIndex() dropIndexes() getIndexes()

聚合操作

aggregate()

聚合操作 $group $project $match $sum $avg $max $min **************

聚合操作

$limit 顯示前幾條文檔

e.g. 獲取數(shù)據(jù)的前兩個(gè)文檔 db.class1.aggregate({$limit:2})

$skip 跳過(guò)幾條文檔

e.g. 跳過(guò)前兩條文檔顯示后面內(nèi)容 db.class1.aggregate({$skip:2})

$sort 排序

e.g. 按年齡升序排序 db.class1.aggregate({$sort:{age:1}})

聚合管道 : 將前一個(gè)聚合操作得到的結(jié)果,給后一個(gè)聚合操作繼續(xù)使用

db.collection.aggregate([聚合1,聚合2....])

e.g. $match ---> $project ---> $sort db.class1.aggregate([{$match:{sex:'m'}},{$project:{_id:0}},{$sort:{age:1}}])

e.g. $group ---> $match db.class1.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])

練習(xí): 增加分?jǐn)?shù)域 score:{chinese:88,math:76,english:76}

1.學(xué)生按照性別分組,統(tǒng)計(jì)每組人數(shù) aggregate({$group:{_id:'$sex',num:{$sum:1}}})

\2. 統(tǒng)計(jì)每名男生的語(yǔ)文分?jǐn)?shù) aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])

\3. 將所有女生按照英語(yǔ)成績(jī)降序排序 aggregate([{$match:{sex:'w'}},{$sort:{'score.englisth':-1}}])

固定集合

mongodb中可以創(chuàng)建大小固定的集合,稱之為固定集合

特點(diǎn) : 插入速度快,順序查找速度快 能夠淘汰早期數(shù)據(jù) 可以控制集合大小

使用 : 臨時(shí)緩存 日志處理

db.createCollection(collection,{capped:true,size:10000,max:1000})

capped:true 表示創(chuàng)建固定集合 size : 表示集合的大小 bytes 4.0最小 4096 max : 表示最多存放多少文檔

e.g. db.createCollection('log',{capped:true,size:10,max:3})

文件存儲(chǔ)

文件存儲(chǔ)到數(shù)據(jù)庫(kù)方式

\1. 存儲(chǔ)路徑 將文件在本地的路徑以字符串形式存儲(chǔ)到數(shù)據(jù)庫(kù)

優(yōu)點(diǎn) : 節(jié)省數(shù)據(jù)庫(kù)空間 缺點(diǎn) : 當(dāng)數(shù)據(jù)庫(kù)或者文件位置發(fā)生變化時(shí)文件丟失。

\2. 存儲(chǔ)文件本身 以二進(jìn)制方式將文件存儲(chǔ)到數(shù)據(jù)庫(kù) 優(yōu)點(diǎn):數(shù)據(jù)庫(kù)和文件綁定存在 缺點(diǎn) : 占用空間大,結(jié)構(gòu)化麻煩

mongodb存儲(chǔ)二進(jìn)制文件

* GridFS方法存儲(chǔ)大文件 >16M為大文件 * 將文件轉(zhuǎn)化為二進(jìn)制,進(jìn)行插入 Binary data

GridFS方案解釋

\1. 在mongodb中一個(gè)數(shù)據(jù)庫(kù)創(chuàng)建兩個(gè)集合共同完成對(duì)文件的存儲(chǔ) \2. fs.files 用來(lái)存儲(chǔ)文件的相關(guān)信息,為每一個(gè)文件創(chuàng)建一個(gè)文檔,存儲(chǔ)文件名、文件類型等信息 \3. fs.chunks 用來(lái)分塊存儲(chǔ)文件的實(shí)際內(nèi)容

如何存儲(chǔ) mongofiles -d dbname put file 數(shù)據(jù)庫(kù) 要存儲(chǔ)的文件

* 如果數(shù)據(jù)庫(kù)不存在自動(dòng)創(chuàng)建

fs.files { "_id" : ObjectId("5b569b8969d72e103282f608"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-07-24T03:22:54.259Z"), "length" : 247759369, "md5" : "a94853f4f64b3e87bf98aea770855615", "filename" : "abc.mp4" }

fs.chunks { "_id" : ObjectId("5b569b8969d72e103282f61d"), "files_id" : ObjectId("5b569b8969d72e103282f608"), "n" : 20, "data" : BinData(0,"7Pa7M7M9nZt2bezsz272vbdm/7fhu672fwAAbZKbmR2S7Ndv/.....")}

* 對(duì)于同一個(gè)文件 fs.files中的_id值等于 fs.chunks中的files_id值

文件提取方法

mongofiles -d dbname get file

Grid的優(yōu)缺點(diǎn) 優(yōu)點(diǎn) : 存儲(chǔ)方便,提供較好的命令支持 缺點(diǎn) : 讀寫(xiě)效率低

游標(biāo)

通過(guò)一定的操作獲取返回結(jié)果的對(duì)象

var cursor = db.class1.find() cursor.hasNext() 判斷是否有next cursor.next() 獲取下一條數(shù)據(jù)

python操作mongodb

pymongo模塊 第三方模塊

安裝 sudo pip3 install pymongo

操作步驟 \1. 創(chuàng)建mongodb數(shù)據(jù)庫(kù)連接對(duì)象

conn = pymongo.MongoClient('localhost',27017)

\2. 得到數(shù)據(jù)庫(kù)對(duì)象

db = conn.stu

\3. 獲取集合對(duì)象

myset = db.class1

\4. 增刪改查,索引 ,聚合

調(diào)用各種myset的屬性函數(shù)

\5. 關(guān)閉數(shù)據(jù)庫(kù)連接 conn.close()

插入操作

insert() insert_many() insert_one() save()

查找操作

cursor = find() 返回一個(gè)結(jié)果游標(biāo)

* 在pymongo中使用操作符的方法與mongo shell中相同,只需要轉(zhuǎn)變?yōu)樽址袷郊由弦?hào)即可

cursor 的屬性函數(shù)

next() limit() skip() sort([('name',1),('age',-1)]) count()

* 使用了next或者for取游標(biāo)后就不能使用limit sort操作了

find_one() 返回一個(gè)字典

更新操作

update(query,updata,upsert=False,multi=False) update_many() update_one()

刪除操作 remove(query,multi = True)

multi默認(rèn)為True表示刪除所有篩選內(nèi)容 如果設(shè)置為False則表示刪除一條

復(fù)合功能函數(shù) find_one_and_delete()

索引操作 ensure_index() 創(chuàng)建索引 list_indexes() 查看索引 drop_index() 刪除索引 drop_indexes() 刪除所有索引

聚合操作 aggregate([]) 參數(shù)寫(xiě)法和mongo shell中聚合相同 返回值 : 返回一個(gè)迭代游標(biāo) 同find()

GridFS 程序提取

import gridfs

gridfs.GridFS(db)

插入二進(jìn)制格式數(shù)據(jù)

import bson.binary

常用命令

> show dbs -- 查看數(shù)據(jù)庫(kù)列表

> use admin --創(chuàng)建admin數(shù)據(jù)庫(kù),如果存在admin數(shù)據(jù)庫(kù)則使用admin數(shù)據(jù)庫(kù)

> db ---顯示當(dāng)前使用的數(shù)據(jù)庫(kù)名稱

> db.getName() ---顯示當(dāng)前使用的數(shù)據(jù)庫(kù)名稱

> db.dropDatabase() --刪當(dāng)前使用的數(shù)據(jù)庫(kù)

> db.repairDatabase() --修復(fù)當(dāng)前數(shù)據(jù)庫(kù)

> db.version() --當(dāng)前數(shù)據(jù)庫(kù)版本

> db.getMongo() --查看當(dāng)前數(shù)據(jù)庫(kù)的鏈接機(jī)器地址

> db.stats() 顯示當(dāng)前數(shù)據(jù)庫(kù)狀態(tài),包含數(shù)據(jù)庫(kù)名稱,集合個(gè)數(shù),當(dāng)前數(shù)據(jù)庫(kù)大小 ...

> db.getCollectionNames() --查看數(shù)據(jù)庫(kù)中有那些個(gè)集合(表)

> show collections --查看數(shù)據(jù)庫(kù)中有那些個(gè)集合(表)

> db.person.drop() --刪除當(dāng)前集合(表)person

MongoDB預(yù)熱,簡(jiǎn)單的增刪改

首先我先介紹一點(diǎn)MongoDB的基本概念

1、MongoDB是NoSQL中面向文檔的數(shù)據(jù)庫(kù),他是介于關(guān)系型數(shù)據(jù)庫(kù)與非數(shù)據(jù)庫(kù)之間的數(shù)據(jù)庫(kù)產(chǎn)品。

2、MongoDB的文檔,相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的一行數(shù)據(jù)。

3、多個(gè)文檔組成一個(gè)集合(collection),集合相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的表

4、多個(gè)集合,組合在一起,就是一個(gè)數(shù)據(jù)庫(kù)

5、一個(gè)運(yùn)行的MongoDB Server支持多個(gè)數(shù)據(jù)庫(kù)。

MongoDB中的插入Insert

首先打開(kāi)cmd,輸入Mongo進(jìn)入shell界面

輸入show dbs ,查看當(dāng)前數(shù)據(jù)庫(kù)為local。然后創(chuàng)建數(shù)據(jù)庫(kù),庫(kù)名為fristdb,輸入 use fristdb ,這樣就相當(dāng)于創(chuàng)建啦數(shù)據(jù)庫(kù)。

note:

> db.people.insert({"name":"張龍豪","age",18}) 這一句由于{}里面的內(nèi)容不是json結(jié)構(gòu)的數(shù)據(jù),不能插入數(shù)據(jù)庫(kù)表(集合)people中。

> db.people.insert({"name":"張龍豪","age":18}) 這樣文檔格式?jīng)]有錯(cuò)誤,就插入成功,意思是在fristdb庫(kù)中插入people集合(表),文檔(行數(shù)據(jù))為 {"name":"張龍豪","age":18}

> db.room.insert({"cmp":50,"tree":20}) 這一句又創(chuàng)建啦一個(gè)集合(表)插入文檔(行數(shù)據(jù))為{"cmp":50,"tree":20}

MongoDB中的查看select---find

note:首先我在peple集合中插入啦2條數(shù)據(jù),一條是18歲,一條是20歲。

> db.peple.find() 查出peple集合中的所有的文檔

> db.peple.find({"age":18}) 查出peple集合中年齡為18的一條文檔。

MongoDB中的修改update

Note:這個(gè)看圖,我就不羅嗦啦,update({},{}),前面一個(gè)是查詢條件,后面是修改后的數(shù)據(jù)文檔

MongoDB中的刪除delete--remove

Note:刪除后剩下一條張龍豪20的數(shù)據(jù)

MongoDB高級(jí)查詢?cè)敿?xì)

前言

前幾篇,老玩家繞道即可,新手晚上閑著也是蛋疼,不如把命令敲一邊,這樣你就會(huì)對(duì)MongoDB有一定的掌握啦。如果沒(méi)有安裝MongoDB去看我的上一篇博客 MongoDB下載安裝與簡(jiǎn)單增刪改查

前奏:啟動(dòng)mongdb數(shù)據(jù)庫(kù)服務(wù),并進(jìn)入shell界面

> cmd

> cd C:\Program Files\MongoDB\bin --進(jìn)入mongdb安裝文件的bin目錄下。

> net start mongoDB; --開(kāi)啟mongoDB數(shù)據(jù)庫(kù)服務(wù)

> mongo --進(jìn)入shell界面

首先我先介紹一點(diǎn)MongoDB的基本概念

1、MongoDB是NoSQL中面向文檔的數(shù)據(jù)庫(kù),他是介于關(guān)系型數(shù)據(jù)庫(kù)與非數(shù)據(jù)庫(kù)之間的數(shù)據(jù)庫(kù)產(chǎn)品。

2、MongoDB的文檔,相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的一行數(shù)據(jù)。

3、多個(gè)文檔組成一個(gè)集合(collection),集合相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的表

4、多個(gè)集合,組合在一起,就是一個(gè)數(shù)據(jù)庫(kù)

5、一個(gè)運(yùn)行的MongoDB Server支持多個(gè)數(shù)據(jù)庫(kù)。

常用命令

> show dbs -- 查看數(shù)據(jù)庫(kù)列表

> use admin --創(chuàng)建admin數(shù)據(jù)庫(kù),如果存在admin數(shù)據(jù)庫(kù)則使用admin數(shù)據(jù)庫(kù)

> db ---顯示當(dāng)前使用的數(shù)據(jù)庫(kù)名稱

> db.getName() ---顯示當(dāng)前使用的數(shù)據(jù)庫(kù)名稱

> db.dropDatabase() --刪當(dāng)前使用的數(shù)據(jù)庫(kù)

> db.repairDatabase() --修復(fù)當(dāng)前數(shù)據(jù)庫(kù)

> db.version() --當(dāng)前數(shù)據(jù)庫(kù)版本

> db.getMongo() --查看當(dāng)前數(shù)據(jù)庫(kù)的鏈接機(jī)器地址

> db.stats() 顯示當(dāng)前數(shù)據(jù)庫(kù)狀態(tài),包含數(shù)據(jù)庫(kù)名稱,集合個(gè)數(shù),當(dāng)前數(shù)據(jù)庫(kù)大小 ...

> db.getCollectionNames() --查看數(shù)據(jù)庫(kù)中有那些個(gè)集合(表)

> show collections --查看數(shù)據(jù)庫(kù)中有那些個(gè)集合(表)

> db.person.drop() --刪除當(dāng)前集合(表)person

MongoDB接入Javascrip風(fēng)格語(yǔ)法,for,while,next,hasNext,forEach,toArray,findOne,limit

Note:

1、p={name:"張龍豪",age:18} 這個(gè)不是規(guī)范的json格式,使用這種類似javascript語(yǔ)法,對(duì)象會(huì)自動(dòng)補(bǔ)全為規(guī)范的json格式{"name":"張龍豪","age":18}.

2、我在這里插入2條數(shù)據(jù),一條是insert語(yǔ)法,一條是save語(yǔ)法,這里的insert與save是一樣的功能。

Note:這里我主要用啦一個(gè)for語(yǔ)法,循環(huán)插入啦4條數(shù)據(jù),是不是有點(diǎn)小激動(dòng)。哈哈,mongodb就是這么任性。

Note:這里是吧查詢出來(lái)的

1、while:作為程序員應(yīng)該都不陌生他是個(gè)循環(huán)。

2、hasNext: cursor集合遍歷,是否還有數(shù)據(jù)。

3、printjson:輸出集合中的文檔

4、next:當(dāng)前文檔,并向下遍歷。

Note:forEach循環(huán)輸入,必須定義一個(gè)函數(shù)供每個(gè)游標(biāo)元素調(diào)用。

Note:游標(biāo)也可以當(dāng)作數(shù)組來(lái)用。

Note:游標(biāo)轉(zhuǎn)換為真實(shí)的數(shù)組類型,使用。

Note:findOne,返回結(jié)果集中的第一條數(shù)據(jù)。limit(3),返回結(jié)果集中的前三條數(shù)據(jù)。

MongoDB中的高級(jí)查詢

面向文檔的NoSql數(shù)據(jù)庫(kù)重要解決的問(wèn)題不是高性能的并發(fā)讀寫(xiě)問(wèn)題,而是保證海量數(shù)據(jù)存儲(chǔ)的同時(shí),具有比一般數(shù)據(jù)庫(kù)更加良好的查詢性能。

Note:條件操作符號(hào): > 、 < 、 >= 、<=

1、 $gt //大于 > ,$lt //小于 < ,$gte //大于等于 >= ,$lte //小于等于

2、{"filed":{$op,value}} //filed字段 ,$op條件操作符號(hào),value值。

3、{"age":{$gt:1}} : person集合中年齡大于1的所有數(shù)據(jù)文檔

Note:$all匹配所有,類似t-sql中的in,但是t-sql中的in是滿足括號(hào)里面的任何一個(gè)都能出數(shù)據(jù),而mongodb中的$all則必須滿足[]中的所有值。

1、{age:{$all:[7,9]}}:age數(shù)組中只要有7和9就滿足條件。如果只有7,沒(méi)有9則不符合條件。

Note:$exists判斷字段是否存在,(true/false)

1、{city:{$exists:true}}: 集合中存在city這個(gè)字段的數(shù)據(jù)

Note:$mod取模運(yùn)算。

1、{age:{$mod:[7,6]}}:集合中模7余6的數(shù)據(jù)

Note:$ne不等于

Note:$in包含,$nin不包含。跟t-sql中的in,not in一樣。

1、{age:{$in:[10,11]}}:如果age是數(shù)組的話,只要數(shù)組包含in中條件的任何一條數(shù)據(jù),都能被檢索出來(lái)。不是數(shù)組,則只要滿足in中的任何一個(gè)條件數(shù)據(jù),也可以被檢索出來(lái)。

Note:數(shù)組元素個(gè)數(shù)。

1、{age:{$size:4}}:age數(shù)組元素個(gè)數(shù)為4的數(shù)據(jù)結(jié)果集。

Note:$not正則匹配,不包含以張開(kāi)頭的數(shù)據(jù)。

Note:skip,limit,sort,count

1、skip(2):從數(shù)據(jù)集的第二條開(kāi)始查詢

2、limit(2) : 依次查出2條數(shù)據(jù)。

3、sort({age:1}) : 1.正序查詢,-1倒敘查詢。

4、count():結(jié)果集總數(shù)。

分類: MongoDB

參考網(wǎng)站

芒果數(shù)據(jù)庫(kù)基本操作a1264716408的博客-CSDN博客芒果db查詢

MongoDB下載安裝與簡(jiǎn)單增刪改查 - 張龍豪 - 博客園 (cnblogs.com)

MongoDB高級(jí)查詢?cè)敿?xì) - 張龍豪 - 博客園 (cnblogs.com)

MongoDB和java代碼結(jié)合

package com.liujinghe.demo.mongodb; ? import java.net.UnknownHostException; import java.util.Date; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.MongoClient; import com.mongodb.MongoException; ? public class Demo {public static void main(String[] args) { ?try {/**** Connect to MongoDB ****/// Since 2.10.0, uses MongoClient//(MongoClient類的實(shí)例)一個(gè)帶有內(nèi)部連接池的MongoDB客戶端MongoClient mongo = new MongoClient("localhost", 27017); ?/**** Get database ****/// if database doesn't exists, MongoDB will create it for you//創(chuàng)建名為yihaomen的數(shù)據(jù)庫(kù)DB db = mongo.getDB("yihaomen"); ?/**** Get collection / table from 'yihaomen' ****/// if collection doesn't exists, MongoDB will create it for you//創(chuàng)建集合(表)DBCollection table = db.getCollection("crudCollection"); ?/**** Insert ****/// create a document to store key and value//創(chuàng)建BasicDBObject對(duì)象,將代碼對(duì)象轉(zhuǎn)換為json數(shù)據(jù)BasicDBObject document = new BasicDBObject();document.put("name", "yihaomen");document.put("age", 30);document.put("createdDate", new Date());//向芒果db中插入數(shù)據(jù)table.insert(document); ?/**** Find and display ****///創(chuàng)建BasicDBObject對(duì)象,將代碼對(duì)象轉(zhuǎn)換為json數(shù)據(jù)BasicDBObject searchQuery = new BasicDBObject();searchQuery.put("name", "yihaomen"); ?//從芒果db中查詢數(shù)據(jù),返回結(jié)果放入DBCursorDBCursor cursor = table.find(searchQuery);while (cursor.hasNext()) {System.out.println(cursor.next());} ?/**** Update ****/// search document where name="yihaomen" and update it with new values//創(chuàng)建BasicDBObject對(duì)象,將代碼對(duì)象轉(zhuǎn)換為json數(shù)據(jù)//要修改的對(duì)象BasicDBObject query = new BasicDBObject();query.put("name", "yihaomen"); ?//修改后的對(duì)象BasicDBObject newDocument = new BasicDBObject();newDocument.put("name", "yihaomen-updated"); ?//修改條件BasicDBObject updateObj = new BasicDBObject();updateObj.put("$set", newDocument); ?//芒果db修改操作table.update(query, updateObj); ?/**** Find and display ****/BasicDBObject searchQuery2= new BasicDBObject().append("name", "yihaomen-updated"); ?DBCursor cursor2 = table.find(searchQuery2); ?while (cursor2.hasNext()) {System.out.println(cursor2.next());} ?/**** Remove test ****///刪除操作//BasicDBObject delDocument = new BasicDBObject();//newDocument.put("name", "yihaomen-updated");//table.remove(delDocument); ?/**** Done ****/System.out.println("Done");} ? // ? ? ? } catch (UnknownHostException e) { // ? ? ? ? ? e.printStackTrace(); // ? ? ? }catch (MongoException e) {e.printStackTrace();} ?} }

總結(jié)

以上是生活随笔為你收集整理的芒果db的基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。