数据库mongodb基础操作

mongodb Aggregation聚合操作之addField

2021-02-18  本文已影响0人  蚁族的乐土

在上一篇mongodb Aggregation聚合操作之group分组中详细介绍了mongodb聚合操作中的group使用以及参数细节。本篇将开始介绍Aggregation聚合操作中的addFields添加新字段操作。

说明:

   将新字段添加到文档。与 $project相似,$addFields重塑流中的每个文档;具体而言,通过向输出文档添加新字段,该输出文档既包含输入文档中的现有字段,又包含新添加的字段。

语法:

   { $addFields: { <newField>: <expression>, ... } }

注意点:【如果新字段的名称与现有字段名称(包括_id)相同$addFields,则使用指定表达式的值覆盖该字段的现有值。】

语法:

{ $addFields: { <newField>: <expression>, ... } }

1. 示例

1.1. 添加字段嵌入文档中

初始化数据:

    db.vehicles.insetMany([{ _id: 1, type: "car", specs: { doors: 4, wheels: 4 } },

{ _id: 2, type: "motorcycle", specs: { doors: 0, wheels: 2 } },

{ _id: 3, type: "jet ski" }])

示例:

    db.vehicles.aggregate( [

        {

           $addFields: {

              "specs.fuel_type": "unleaded"

           }

        }

   ] )

结果:

{ _id: 1, type: "car",

   specs: { doors: 4, wheels: 4, fuel_type: "unleaded" } }

{ _id: 2, type: "motorcycle",

   specs: { doors: 0, wheels: 2, fuel_type: "unleaded" } }

{ _id: 3, type: "jet ski",

   specs: { fuel_type: "unleaded" } }

1.2. 覆盖已有的字段

初始化数据:

    db.insertOne({ _id: 1, dogs: 10, cats: 15 })

示例:

     db.animals.aggregate( [

  {

    $addFields: { "cats": 20 }

  }

] )

结果:

{ _id: 1, dogs: 10, cats: 20 }

1.3. 使用两个$addFields阶段并使用表达式

初始化数据:

   db.scores.insertMany([{

  _id: 1,

  student: "Maya",

  homework: [ 10, 5, 10 ],

  quiz: [ 10, 8 ],

  extraCredit: 0

},

{

  _id: 2,

  student: "Ryan",

  homework: [ 5, 6, 5 ],

  quiz: [ 8, 8 ],

  extraCredit: 8

}])

示例:以下操作使用两个$addFields阶段在输出文档中包含三个新字段:

   db.scores.aggregate( [

   {

     $addFields: {

       totalHomework: { $sum: "$homework" } ,

       totalQuiz: { $sum: "$quiz" }

     }

   },

   {

     $addFields: { totalScore:

       { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }

   }

] )

结果:

{

  "_id" : 1,

  "student" : "Maya",

  "homework" : [ 10, 5, 10 ],

  "quiz" : [ 10, 8 ],

  "extraCredit" : 0,

  "totalHomework" : 25,

  "totalQuiz" : 18,

  "totalScore" : 43

}

{

  "_id" : 2,

  "student" : "Ryan",

  "homework" : [ 5, 6, 5 ],

  "quiz" : [ 8, 8 ],

  "extraCredit" : 8,

  "totalHomework" : 16,

  "totalQuiz" : 16,

  "totalScore" : 40

}

1.4. 一个字段替换为另一个字段

数据初始化:

db.scores.insertMany([{ "_id" : 1, "item" : "tangerine", "type" : "citrus" },

{ "_id" : 2, "item" : "lemon", "type" : "citrus" },

{ "_id" : 3, "item" : "grapefruit", "type" : "citrus" }])

示例:【在下面的示例中,项目字段替换_id字段】

db.fruit.aggregate( [

  {

    $addFields: {

      _id : "$item",

      item: "fruit"

    }

  }

] )

结果:

{ "_id" : "tangerine", "item" : "fruit", "type" : "citrus" }

{ "_id" : "lemon", "item" : "fruit", "type" : "citrus" }

{ "_id" : "grapefruit", "item" : "fruit", "type" : "citrus" }

1.5. 向数组中添加元素

数据初始化:

db.scores.insertMany([

   { _id: 1, student: "Maya", homework: [ 10, 5, 10 ], quiz: [ 10, 8 ], extraCredit: 0 },

   { _id: 2, student: "Ryan", homework: [ 5, 6, 5 ], quiz: [ 8, 8 ], extraCredit: 8 }

])

示例:【利用$concatArrays表达式向现有homework数组字段添加元素7】

db.scores.aggregate([

   { $match: { _id: 1 } },

   { $addFields: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }

])

结果:

{

    "_id" : 1.0,

    "student" : "Maya",

    "homework" : [

        10.0,

        5.0,

        10.0,

        7.0

    ],

    "quiz" : [

        10.0,

        8.0

    ],

    "extraCredit" : 0.0

}

上一篇 下一篇

猜你喜欢

热点阅读