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

Mongodb tổng hợp truy vấn trên các bản ghi cụ thể thay vì bộ sưu tập

Sử dụng $ so khớp để lọc các tài liệu đi vào đường dẫn của bạn.

Nhận danh sách id đơn đặt hàng (để sử dụng trong $ match đường dẫn với $ in ) bằng cách sử dụng find () của con trỏ map () phương pháp:

var orderIds = db.delivery.find({"status": "DELIVERED"}).map(function(d){return d.order;});
db.orders.aggregate([
    { "$match": { "_id": { "$in": orderIds } } },
    { "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])

Đối với MongoDB 3.2, hãy sử dụng $ lookup toán tử thực hiện phép nối bên ngoài bên trái vào một bộ sưu tập chưa được cứng trong cùng một cơ sở dữ liệu để lọc trong các tài liệu từ bộ sưu tập "đã kết hợp" để xử lý.

Ví dụ sau cho thấy cách bạn có thể chạy hoạt động tổng hợp trên đơn đặt hàng bộ sưu tập kết hợp các tài liệu từ đơn đặt hàng với các tài liệu từ giao hàng bộ sưu tập sử dụng trường order từ giao hàng bộ sưu tập:

db.orders.aggregate([
    {
        "$lookup": {
            "from": "delivery",
            "localField": "_id",
            "foreignField": "order",
            "as": "delivery_orders"
        }
    },
    { "$match": { "delivery_orders.status": "DELIVERED" } },    
    { "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Các trường truy vấn trong Bộ sưu tập MongoDB.

  2. Chiếu tới một loại khác bằng C # SDK

  3. MongoDB nối dữ liệu bên trong một mảng đối tượng

  4. Truy xuất âm thanh - tệp nhị phân - được lưu trữ trong Mlab của tôi

  5. MongoDB:Tại sao find và findOne chỉ trả về phần tử mảng cuối cùng?