美文网首页
聚合流水线操作(aggregation pipline)

聚合流水线操作(aggregation pipline)

作者: 风亡小窝 | 来源:发表于2019-06-08 23:52 被阅读0次

Stages

阶段 描述
$addField 添加新的field
$lookup 与其他collection做join操作
$project 选择下一阶段需要的field

Operators

操作 描述
$cond 条件运算
$arrayElemAt 选择索引位置的元素
$ifNull 当元素等于null或者不存在

Attenttion

aggregation pipline 的 stage 顺序非常的重要,对聚合操作的性能有非常大的影响。

Example

// Requires official MongoShell 3.6+
use revdol;
db.getCollection("forums").aggregate(
    [
        { 
            "$lookup" : {
                "localField" : "user_id", 
                "from" : "users", 
                "foreignField" : "id", 
                "as" : "user_info"
            }
        }, 
        { 
            "$addFields" : {
                "user_info" : {
                    "$arrayElemAt" : [
                        "$user_info", 
                        0.0
                    ]
                }, 
                "forum_picture.images" : {
                    "$ifNull" : [
                        "$images", 
                        "$forum_picture.images"
                    ]
                }, 
                "forum_picture.thumbs" : {
                    "$ifNull" : [
                        "$thumbs", 
                        "$forum_picture.thumbs"
                    ]
                }
            }
        }, 
        { 
            "$project" : {
                "_id" : 0.0, 
                "forum_id" : "$id", 
                "idol_id" : 1.0, 
                "user_id" : 1.0, 
                "title" : 1.0, 
                "content" : 1.0, 
                "images" : 1.0, 
                "nickname" : "$user_info.nickname", 
                "forum_picture" : 1.0
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
);

相关文章

网友评论

      本文标题:聚合流水线操作(aggregation pipline)

      本文链接:https://www.haomeiwen.com/subject/tjnwxctx.html