MongoDB - 聚合

MongoDB聚合方法:aggregate()
    语法:db.collection_name.aggregate(AGGREGATE_OPERATION)
    
管道:MongoDB的聚合管道将文档在一个管道处理完毕的结果传递给下一个管道处理,管道操作是可以重复的
常用管道:
  • $project:
    • 控制返回文档的结构,从文档中选择想要的域,可以重命名,增加或删除域
    • 也可以通过管道表达式进行一些负责的操作,例如数学计算,日期操作,逻辑操作等
    • _id字段默认包含在输出文档中,要从输出文档中排除_id字段,则必须指定$project的 _id:0 
      # 事例数据
      {
          "_id": ObjectId("5e5e05ef88f52a1c16bbff0f"),
          "url": "https://www.baidu.com/",
          "web_name": "百度",
          "click_num": 605,
          "year": 2019
      }
      # 输出文档中除了web_name和click_num外,还包含默认的 _id 域
      db.test_study.aggregate([
          {
              $project: {
                  web_name: "$web_name",
                  click_num: "$click_num"
              }
          }
      ])
      
      
      # 设置 _id:0 输出文档中只包括 web_name 和 click_num,不包含 _id 域
      db.test_study.aggregate([
          {
              $project: {
               _id:0,
                  web_name: "$web_name",
                  click_num: "$click_num"
              }
          }
      ])
    • 输出嵌套字段中的部分字段
      # 事例数据{
          "_id": 1,
          "title": "789",
          "author": {
              "last": "Li",
              "first": "Lucy",
              "country": "China"
          },
          "copies": 5,
          "lastModified": "2019-07-28"
      }

      需求:输出 title,author.country

      db.test.aggregate([{
          $project: {
          _id:0,
              title: "$title",
              author_country: "$author.country"
          }
      }])
    • 排除_id、author.country、copies 其他字段均输出(事例数据如上)
      db.test.aggregate([{
          $project: {
              "_id":0,
              "copies": 0,
              "author.country": 0
          }
      }])注意:
      "copies" 要加双引号

相关推荐