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

Lọc bỏ các mảng trùng lặp và trả về mảng duy nhất trong tổng hợp mongodb

db.collection.aggregate([
  {//Denormalize first level
    "$unwind": "$newList"
  },
  {//Second nested level
    "$unwind": "$newList.newPMBList"
  },
  {//Deep nested last level
    "$unwind": "$newList.newPMBList.newPMList"
  },
  {
    $group: {//Grouping back
      "_id": null,
      "newList": {
        $push: "$newList.newPMBList.newPMList"
      }
    }
  },
  {
    $project: {//Finding unique
      newList: {
        $setUnion: [
          "$newList",
          "$newList"
        ]
      }
    }
  }
])

Tôi khuyên bạn nên bao gồm các trường khác bằng cách sử dụng first bộ tích lũy trong nhóm group và bảo quản chúng trong project .

Bạn có thể đơn giản hóa thêm như bên dưới

db.test.aggregate([
  {
    "$unwind": "$newList"
  },
  {
    "$unwind": "$newList.newPMBList"
  },
  {
    "$unwind": "$newList.newPMBList.newPMList"
  },
  {
    $group: {
      "_id": null,
      "newList": {//addToSet keeps distinct
        $addToSet: "$newList.newPMBList.newPMList"
      }
    }
  }
])

Hơn nữa, hãy mua bỏ qua một hàm không chuẩn hóa, nhưng nó trả về mảng các mảng.

db.test.aggregate([
  {
    "$unwind": "$newList"
  },
  {
    "$unwind": "$newList.newPMBList"
  },
  {
    $group: {
      "_id": null,
      "newList": {
        $addToSet: "$newList.newPMBList.newPMList"
      }
    }
  }
])

Nếu bạn bỏ qua một cấp độ khác, nó sẽ thêm một cấp độ lồng nhau nữa trong kết quả.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Giảm bộ nhớ được sử dụng khi tải khung dữ liệu gấu trúc khổng lồ từ MongoDB

  2. Sự cố thiết lập Bản sao SSL MongoDB - Chứng chỉ không được hỗ trợ

  3. Chèn các trường (cột) mới vào mongoDB với gấu trúc

  4. Có thể xác định khóa khi chèn vào mongodb không

  5. Khung tổng hợp Mongo:mức khóa của hoạt động $ out giai đoạn cuối là gì?