mongodb Aggregation聚合操作之$out

在上一篇?mongodb Aggregation聚合操作之$replaceRoo中詳細(xì)介紹了mongodb聚合操作中的$replaceRoot使用以及參數(shù)細(xì)節(jié)。本篇將開始介紹Aggregation聚合操作中的$out操作。

說明:

獲取聚合管道返回的文檔,并將其寫入指定的集合。$out操作符必須是管道中的最后一個(gè)階段。

版本3.2.0中的變化:MongoDB 3.2增加了對文檔驗(yàn)證的支持。bypassDocumentValidation字段允許您在聚合操作的$out階段繞過文檔驗(yàn)證。這允許插入不滿足驗(yàn)證要求的文檔。將bypassDocumentValidation指定為聚合方法或命令的選項(xiàng)。


語法:

{ $out: "<output-collection>" }


注意:不能將分片集合指定為輸出集合??梢詫艿赖妮斎爰线M(jìn)行切分。$out操作符不能將結(jié)果寫入有上限的集合。如果當(dāng)前數(shù)據(jù)庫中還不存在一個(gè)集合,則$out操作將在該數(shù)據(jù)庫中創(chuàng)建一個(gè)新的集合。在聚合完成之前,集合是不可見的。如果聚合失敗,MongoDB不會(huì)創(chuàng)建集合。如果$out操作指定的集合已經(jīng)存在,則在完成聚合后,$out stage將自動(dòng)用新的結(jié)果集合替換現(xiàn)有集合,具體步驟分為以下四步:

1.創(chuàng)建一個(gè)臨時(shí)集合。

2.將索引從現(xiàn)有集合復(fù)制到臨時(shí)集合。

3.將文檔插入到臨時(shí)集合中。

4.調(diào)用db.collection.renameCollection使用dropTarget的renameCollection: true將臨時(shí)集合重命名為目標(biāo)集合。

$out操作不會(huì)更改前一個(gè)集合上存在的任何索引。如果聚合失敗,則$out操作不會(huì)對預(yù)先存在的集合進(jìn)行更改。指數(shù)的約束如果管道生成的文檔違反了任何唯一索引(包括原始輸出集合的_id字段上的索引),則管道將無法完成。

1.?示例


初始化數(shù)據(jù):

db.outExample.insertMany([{ "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 },

{ "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 },

{ "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 },

{ "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 },

{ "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }])


示例:根據(jù)author字段分組后,把結(jié)果寫到authors集合中

db.outExample.aggregate( [

??????????????????????{ $group : { _id : "$author", books: { $push: "$title" } } },

??????????????????????{ $out : "authors" }

??????????????????] )


查看authors集合獲得結(jié)果:

{

????"_id" : "Homer",

????"books" : [

????????"The Odyssey",

????????"Iliad"

????]

}


{

????"_id" : "Dante",

????"books" : [

????????"The Banquet",

????????"Divine Comedy",

????????"Eclogues"

????]

}

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

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

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