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

Truy xuất danh sách mặt hàng bằng cách kiểm tra nhiều giá trị thuộc tính trong MongoDB trong golang

Bạn cần phải sử dụng khung tổng hợp, nơi bạn sẽ chạy một đường dẫn tổng hợp để lọc đầu tiên các tài liệu trong bộ sưu tập dựa trên venueList id sử dụng $match nhà điều hành.

Quy trình thứ hai sẽ đòi hỏi phải làm phẳng venueListsum mảng subocument để dữ liệu trong tài liệu được xử lý sâu hơn dưới dạng các mục nhập không chuẩn hóa. $unwind toán tử hữu ích ở đây.

Bộ lọc bổ sung bằng cách sử dụng $match là cần thiết sau khi giải nén để chỉ những tài liệu bạn muốn tổng hợp mới được phép vào đường dẫn tiếp theo.

Đường dẫn chính sẽ là $group giai đoạn toán tử tổng hợp các tài liệu đã lọc để tạo ra các khoản tiền mong muốn bằng cách sử dụng toán tử tích lũy $sum . Để có kết quả mong muốn, bạn sẽ cần sử dụng toán tử một kỳ hạn như $cond để tạo các trường đếm độc lập vì điều đó sẽ cung cấp số lượng tài liệu cho $sum biểu thức tùy thuộc vào giá trị tên.

Đặt điều này hoàn toàn, hãy xem xét chạy đường dẫn sau:

db.collection.aggregate([
    { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
    { "$unwind": "$venueList" },
    { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
    { "$unwind": "$venueList.sum" },    
    {
        "$group": {
            "_id": null,
            "linux": {
                "$sum": {
                    "$cond": [ 
                        { "$eq": [ "$venueList.sum.name", "linux" ] }, 
                        "$venueList.sum.value", 0 
                    ]
                }
            },
            "ubuntu": {
                "$sum": {
                    "$cond": [ 
                        { "$eq": [ "$venueList.sum.name", "ubuntu" ] }, 
                        "$venueList.sum.value", 0 
                    ]
                }
            }
        }
    }
])

Để sử dụng với mGo, bạn có thể chuyển đổi đường dẫn trên bằng cách sử dụng hướng dẫn trong http://godoc.org/labix.org/v2/mgo#Collection.Pipe

Để có một giải pháp thay thế linh hoạt hơn và hoạt động tốt hơn, thực thi nhanh hơn nhiều so với cách trên và cũng xem xét các giá trị chưa biết cho danh sách tổng, hãy chạy đường dẫn thay thế như sau

db.collection.aggregate([
    { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
    { "$unwind": "$venueList" },
    { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
    { "$unwind": "$venueList.sum" },    
    { 
        "$group": {
            "_id": "$venueList.sum.name",
            "count": { "$sum": "$venueList.sum.value" }
        }
    },
    { 
        "$group": {
            "_id": null,
            "counts": {
                "$push": {
                    "name": "$_id",
                    "count": "$count"
                }
            }
        }
    }
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ví dụ cho các giao dịch trong mongodb với GoLang

  2. Mongodb trả lại bộ sưu tập cũ

  3. Làm cách nào để sắp xếp lại các thẻ và danh sách như Trello?

  4. Cài đặt MongoDB trong WSL

  5. NestJS:Cách triển khai xác thực người dùng dựa trên phiên