mongo聚合指令

2021-10-23 19:50:43 字數 1315 閱讀 6139

為了便於做複雜的聚合查詢,mongo提供了aggregate指令,基於管道運算進行對資料的處理,常見的$sort,$project,$group,$match就不在贅述了,下面整理一些不常見的但是有時候很有用的指令:

$unwind

我們插入mongo資料的時候,肯定會遇到插入陣列或者列表的場景,但是對於列表資料的讀取怎麼操作呢,比如我想把多條文件中的列表資料重新整合去重該怎麼操作,這是就需要用到unwind,它可以將某乙個列表打散拆成多條文件:

對這條文件進行unwind操作之後,會變成

然後對拆解之後的所有文件進行addtoset就能很容易完成去重操作了。

$out

這個命令可以聚合統計的資料寫入到一張新錶中,一般在整個聚合操作流程的最後一步:

db.users.

aggregate()

.match

(,qd:

"channel_001"})

.group(}

).project()

.sort()

.limit

(100).

out(

"output-collection"

)

但是這個命令有乙個坑人的地方就是,每次重新執行$out命令時,這張表都會被覆蓋掉,不能進行追加資料。所以該命令適合做單次聚合結果匯出的臨時表。

$merge

這個命令和$out類似,是將聚合結果匯出到某一張表的命令,區別在於merge不會覆蓋原有資料,會進行合併:

db.users.

aggregate()

.match

(,qd:

"channel_001"})

.group(}

).project()

.sort()

.limit

(100).

merge

(, on:

"_id"

, whenmatched:

"replace"

, whennotmatched:

"insert"

})

可以看到merge還有子指令,into指明匯出目標表,db為庫名,coll為具體的表名,on是合併時的依據字段,比如這裡以id為基準進行合併,如果id重複了,就會replace新資料覆蓋老資料,如果id沒有重複,就會直接插入新資料。所以這個命令比out強大,但是這個命令是到了mongo4.2以後才出來的,如果mongo版本太老了,就無法使用了。

mongo聚合和mapreduce例子

聚合語句 比較集合內兩欄位大小 db.test.aggregate logtype off mac 1 1,0 聚合條數語句 db.tablename.aggregate logtype off mac 1 1,0 簡單聚合語句 db.test.aggregate buildingid 49,int...

mongo聚合操作符 unwind

1.按條件獲取所有停機原因及對應的停機時長資料 2.按條件獲取指定停機型別下的停機原因及停機時長 此處用來過濾指定停機分類或停機型別 path你要打散的字段 includearrayindex,可選的。乙個新字段的名稱,用於儲存元素的陣列索引。名稱不能以美元符號開頭。preservenullande...

mongo 的基本指令

1.show dbs 2.db.tables.find 3.use tablesnames 4.db.dropdatabase 5.db.collection.drop 啟動 mongod f etc mongod.conf 附加配置檔案 mongod.conf for documentation ...