mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟
本文介紹了mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟,分享給大家,具體如下:
mongodb文檔內(nèi)包含數(shù)組,需要將數(shù)組中符合條件的數(shù)據(jù)過濾出來并返回結(jié)果集,可以用兩種方式來查詢group或filter。
數(shù)據(jù)源:
{ "_id" : ObjectId("5bbcc0c9a74db9804e78a157"), "uid" : "1000001", "name" : "zhangsan", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "0", "city" : "上海" }, { "is_query" : "1", "city" : "深圳" } ] } { "_id" : ObjectId("5bbcc167a74db9804e78a172"), "uid" : "1000002", "name" : "lisi", "addrs" : [ { "is_query" : "0", "city" : "北京" }, { "is_query" : "0", "city" : "上海" }, { "is_query" : "1", "city" : "深圳" } ] }
要求查詢指定uid下,addrs數(shù)組中只包含is_query等于1的結(jié)果集(0的不包含)。
查詢語(yǔ)句:
方法一:使用$unwind將addrs數(shù)組打散,獲取結(jié)果集后用$match篩選符合條件的數(shù)據(jù),最后使用$group進(jìn)行聚合獲取最終結(jié)果集。
db.getCollection('user').aggregate( [ { $unwind: "$addrs" }, { $match : { "uid":"1000001", "addrs.is_query": "1" } }, { $group : { "_id" : "$uid", "addrs": { $push: "$addrs" } } } ] )
Result:
{ "_id" : "1000001", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "1", "city" : "深圳" } ] }
方法二:使用$match過濾符合條件的根文檔結(jié)果集,然后使用$project返回對(duì)應(yīng)字段的同時(shí),在addrs數(shù)組中使用$filter進(jìn)行內(nèi)部過濾,返回最終結(jié)果集
db.getCollection('user').aggregate( [ { $match : { "uid": "1000001" } }, { $project: { "uid": 1, "name": 1, "addrs": { $filter: { input: "$addrs", as: "item", cond: { $eq : ["$$item.is_query","1"] } } } } } ] )
Result:
{ "_id" : ObjectId("5bbcc0c9a74db9804e78a157"), "uid" : "1000001", "name" : "zhangsan", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "1", "city" : "深圳" } ] }
相對(duì)于$group分組聚合返回結(jié)果集的方式,在當(dāng)前查詢要求下$filter顯得更加優(yōu)雅一些,也比較直接。當(dāng)然如果包含統(tǒng)計(jì)操作,比如要求返回is_query等于1的數(shù)量,這時(shí)候$group就非常合適了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB訪問控制的操作方法
- 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB備份與恢復(fù)的實(shí)踐詳解
- 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問題
- SpringDataMongoDB多文檔事務(wù)的實(shí)現(xiàn)
- MongoDB中文檔的更新操作示例詳解
- MongoDB數(shù)據(jù)庫(kù)文檔操作方法(必看篇)
- mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
- PHP庫(kù) 查詢Mongodb中的文檔ID的方法
- MongoDB如何更新多級(jí)文檔的數(shù)據(jù)
相關(guān)文章
Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法
這篇文章主要介紹了Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法,本文詳細(xì)介紹了將mongoDB安裝為WinXP下系統(tǒng)服務(wù)的過程,需要的朋友可以參考下2014-10-10MongoDB存儲(chǔ)時(shí)間時(shí)差問題的解決方法
這篇文章主要給大家介紹了關(guān)于MongoDB存儲(chǔ)時(shí)間時(shí)差問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mongodb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09win7平臺(tái)快速安裝、啟動(dòng)mongodb的方法
這篇文章主要介紹了win7平臺(tái)快速安裝、啟動(dòng)mongodb的方法,結(jié)合圖文形式分析了win7平臺(tái)下載、安裝、啟動(dòng)、配置MongoDB數(shù)據(jù)庫(kù)的方法與注意事項(xiàng),需要的朋友可以參考下2020-05-05

MongoDB使用小結(jié):一些不常見的經(jīng)驗(yàn)分享