MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB nhóm tất cả các khóa và giá trị trong một bộ sưu tập theo một trường nhất định

Bạn đang đi đúng hướng ở đó.

Khi chuyển đổi toàn bộ đối tượng thành một mảng, hãy lưu trường Category.

Các giai đoạn cần thiết:

  • $ project để lưu Danh mục và chuyển đổi đối tượng thành một mảng
  • $ giải phóng mảng để xem xét từng trường riêng biệt
  • $ match để xóa _id , Category và bất kỳ trường nào khác mà bạn không muốn được nhóm từ mảng
  • $ group theo Categoryk để đẩy các giá trị của mỗi khóa vào một mảng
  • $ group theo Category để thu thập các khóa và mảng với nhau
  • $ dự án để chuyển đổi mảng có các giá trị đã thu thập thành một đối tượng
  • $ addFields để đưa Danh mục vào đối tượng mới
  • $ ReplaceRoot để quảng cáo đối tượng mới
db.collection.aggregate([
  {$project: {
      Category: 1,
      fields: {$objectToArray: "$$ROOT"}
  }},
  {$unwind: "$fields"},
  {$match: {"fields.k": {$not: {$in: ["_id","Category"]}} }},
  {$group: {
      _id: {
        Category: "$Category",
        key: "$fields.k"
      },
      value: {$push: "$fields.v"}
  }},
  {$group: {
      _id: "$_id.Category",
      fields: {
        $push: {
          "k": "$_id.key",
          "v": "$value"
        }
      }
  }},
  {$project: {
      fields: {$arrayToObject: "$fields"}
  }},
  {$addFields: {
      "fields.Category": "$_id"
  }},
  {$replaceRoot: { newRoot: "$fields"}}
])

Sân chơi




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB chênh lệch giữa $ orderby và Sort

  2. mongo docker image không chạy script sau khi tạo

  3. Xác thực MongoDB 3.2 không thành công

  4. Nhóm Mongodb theo trường sử dụng $ substr

  5. Làm cách nào để tạo chỉ mục văn bản trong mongodb với golang và thư viện mgo?