美文网首页
Mongodb Aggregation $addFields

Mongodb Aggregation $addFields

作者: 沧海2122537190 | 来源:发表于2021-01-25 14:47 被阅读0次

    $addFieldsaggregate的管道操作符,主要功能为添加新的字段,从版本4.2版以后,也可以用$set替换$addFields
    基础语法:{ $addFields: { <newField>: <expression>, ... } }

    一、与$project的异同

    1.$project$addFields都可以向文档中添加指定字段,如果新增字段与现有字段重名,将用新字段覆盖旧有。
    2.$addFields只能新增字段,或利用字段值覆盖的方式修改旧有字段,无法对旧有字段进行筛选屏蔽
    $project可指定显示某些字段,可以指定屏蔽某些字段(这两种方法不能同时使用),可以屏蔽_id,可以添加或重置现有字段值。

    二、示例

    1.向文档中添加字段

    db.getCollection("test").aggregate({
        $addFields: {
            new1: 1, //添加新字段并赋值:数值型
            new2: "1",//添加新字段并赋值:字符型
            new3: {$add: ["$totalHomework", "$totalQuiz"]},//添加新字段并赋值:计算公式(求和)
                    new4:"$totalQuiz",//添加新字段并赋值:已有字段的值
                    new5:"$quiz.1",//添加新字段并赋值:内嵌文档的值
            student:"test",//覆盖原有字段的值
        }
    })
    
    运行结果

    2.向内嵌文档中添加字段

    db.getCollection("test").aggregate({
        $addFields: {
            "quiz.new1": 1, //添加新字段并赋值:数值型
            "quiz.new2": "1",//添加新字段并赋值:字符型
            "quiz.new3": {$add: ["$totalHomework", "$totalQuiz"]},//添加新字段并赋值:计算公式(求和)
                    "quiz.new4":"$totalQuiz",//添加新字段并赋值:已有字段的值
                    "quiz.new5":"$quiz.1",//添加新字段并赋值:内嵌文档的值
                    "quiz.2":"test",//覆盖原有字段的值
        }
    })
    
    
    运行结果

    3.向数组中添加字段

    db.getCollection("test").aggregate([{
        $match: {_id: 4}
    }, {
        $addFields: {
            "newArray1": [1, "abc", ["123"], "$quiz", {$add: ["$totalHomework", "$totalQuiz"]}], 
            //添加数组字段,为数组中添加:数值、字符串、数组、现有字段值,公式
            "newArray2": {
                $concatArrays: [
                //$concatArrays 用于融合数组
                            "$homework", 
                            [1, "abc", ["123"], "$quiz", {$add: ["$totalHomework", "$totalQuiz"]}]
                            ]
            }, //添加新字段newArray2并赋值,融合homework的数组以及newArray1的数组值        
        }
    }])
    

    运行结果

    {
    "_id":4,
    "student":"Ryan",
    "homework":[5,6,5],
    "quiz":{"1":0,"2":6},
    "extraCredit":8,"totalHomework":16,
    "totalQuiz":16,"totalScore":40,
    "newArray1":[1,"abc",["123"],{"1":0,"2":6},32],
    "newArray2":[5,6,5,1,"abc",["123"],{"1":0,"2":6},32]
    }
    

    相关文章

      网友评论

          本文标题:Mongodb Aggregation $addFields

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