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

Bao gồm các trường trong mongodb tổng hợp

Nó không bao gồm trường vì bạn đã không yêu cầu trả lại trường. Điều bạn còn thiếu ở đây là sử dụng $first hoặc "bộ tích lũy" tương tự để trả về phần tử trong $group .

Ngoài ra, nếu bạn không muốn địa chỉ email trống thì hãy loại trừ nó trong $match giai đoạn đường ống, vì đó là điều hiệu quả nhất cần làm.

db.collection.aggregate([
    { $match: { branch: "CO", "customerEmail": { "$ne": "" } } },
    { $group:
        {
            _id: { customer:"$customerID"},
            email: { "$first": "$customerEmail" }
        }
    }
]);

"Đường ống" chỉ trả về "đầu ra" từ các giai đoạn như $group hoặc $project mà bạn thực sự yêu cầu nó. Cũng giống như "Unix pipe" | , những thứ duy nhất có sẵn cho "giai đoạn tiếp theo" là những gì bạn xuất ra.

Điều này sẽ được hiển nhiên đơn giản từ:

db.collection.aggregate([
    { $match: { branch: "CO" } },   
    { $group:
        {
            _id: { customer:"$customerID"}
        }
    }
]);

Hoặc thậm chí:

db.collection.aggregate([
    { $match: { branch: "CO" } },   
    { $project:
        {
            _id: { customer:"$customerID"}
        }
    }
]);

Tất nhiên chỉ trả về _id giá trị vì đó là tất cả những gì bạn yêu cầu.

Bạn chỉ có quyền truy cập trong bất kỳ giai đoạn đường ống nào vào dữ liệu được "xuất bởi giai đoạn trước". Trong một $group điều đó có nghĩa là chỉ _id cho khóa nhóm và bất kỳ điều gì được chỉ định "rõ ràng" sử dụng "bộ tích lũy" hợp lệ cho bất kỳ tài sản nào khác mà bạn muốn trả lại. Bất kỳ bộ tích lũy nào (hợp lệ cho một "chuỗi" ở đây) sẽ làm được, nhưng bất kỳ điều gì bên ngoài _id phải sử dụng "bộ tích lũy" .

Tôi khuyên bạn nên dành thời gian xem xét tất cả toán tử tổng hợp và những gì họ thực sự làm. Có cách sử dụng ví dụ với từng toán tử




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. truy vấn mongo - tài sản có tồn tại không?

  2. Mongoose ODM:NumberInt không được xác định

  3. Java, MongoDB:Làm thế nào để cập nhật mọi đối tượng trong khi lặp lại một bộ sưu tập lớn?

  4. Thông báo cho giao diện người dùng Angular khi trạng thái trong phần phụ trợ Node (MongoDB) thay đổi

  5. Số lượng MongoDB () không xác định