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

Sử dụng tập hợp MongoDB để tìm giao điểm tập hợp của hai tập hợp trong cùng một tài liệu

Bạn đã không còn xa giải pháp đầy đủ với khung tổng hợp - bạn cần một thứ nữa trước $group bước và đó là thứ cho phép bạn xem liệu tất cả những thứ đang được sử dụng có khớp với thứ được sở hữu hay không.

Đây là toàn bộ đường dẫn

> db.house.aggregate(
       {'$unwind':'$uses'}, 
       {'$unwind':'$rooms'}, 
       {'$unwind':'$rooms.owns'}, 
       {$project:  { _id:0, 
                     houseId:1, 
                     uses:"$uses.name", 
                     isOkay:{$cond:[{$eq:["$uses.name","$rooms.owns.name"]}, 1, 0]}
                   }
       }, 
       {$group: { _id:{house:"$houseId",item:"$uses"}, 
                  hasWhatHeUses:{$sum:"$isOkay"}
                }
       },
       {$match:{hasWhatHeUses:0}})

và đầu ra của nó trên tài liệu của bạn

{
    "result" : [
        {
            "_id" : {
                "house" : 123,
                "item" : "sofa"
            },
            "hasWhatHeUses" : 0
        }
    ],
    "ok" : 1
}

Giải thích - sau khi bạn mở cả hai mảng, bây giờ bạn muốn gắn cờ các phần tử trong đó mục đã sử dụng bằng với mục sở hữu và cho chúng một "điểm" khác 0. Bây giờ khi bạn tập hợp lại mọi thứ theo từng nhà, bạn có thể kiểm tra xem có bất kỳ mục nào đã sử dụng không khớp với nhau hay không. Sử dụng 1 và 0 cho điểm cho phép bạn tính tổng và bây giờ một kết quả phù hợp với mục có tổng bằng 0 có nghĩa là nó đã được sử dụng nhưng không khớp với bất kỳ thứ gì trong "sở hữu". Hy vọng bạn thích điều này!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể kết nối với dịch vụ mongodb trong một cụm Kubernetes

  2. Meteor:xuất bản 2 phép chiếu khác nhau của các phần tử mảng

  3. Kiểm tra xem có lỗi trong cập nhật / chèn không | Trình điều khiển Java MongoDB

  4. Tổng hợp nhóm theo ngày với bù đắp tiết kiệm ánh sáng ban ngày

  5. Mongoose không điền (.populate ()) trên Sản xuất (Heroku), nhưng hoạt động trên Địa phương