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

Truy vấn tổng hợp trong Mongodb trả về trường cụ thể

Điều đầu tiên bạn đang làm sai ở đây là không hiểu cách $project được dự định để làm việc. Các giai đoạn đường ống, chẳng hạn như $project $group sẽ chỉ xuất ra các trường được xác định "rõ ràng". Vì vậy, chỉ những trường bạn nói để xuất sẽ có sẵn cho các giai đoạn chuyển tiếp sau.

Cụ thể ở đây, bạn chỉ "chiếu" một phần của trường "u" trong tài liệu của mình và do đó bạn đã xóa dữ liệu khác khỏi khả dụng. Trường hiện tại duy nhất ở đây bây giờ là "tên", là trường mà bạn đã "chiếu".

Có lẽ đó thực sự là ý định của bạn khi làm điều gì đó như thế này:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": {
           "_id": "$u._id",
           "email": { "$toUpper": "$u.e" }
        },
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": "$_id.email",
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Hoặc thậm chí:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": "$u._id",
        "email": { "$first": { "$toUpper": "$u.e" } }
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": 1,
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Điều đó cung cấp cho bạn loại đầu ra mà bạn đang tìm kiếm.

Hãy nhớ rằng vì đây là một "đường ống", khi đó chỉ "đầu ra" từ giai đoạn trước mới có sẵn cho giai đoạn "tiếp theo". Không có khái niệm "toàn cục" của tài liệu vì đây không phải là một câu lệnh khai báo như trong SQL, mà là một "đường dẫn".

Vì vậy, hãy nghĩ đến đường ống Unix "|" lệnh, hoặc nếu không thì hãy tra cứu. Khi đó, suy nghĩ của bạn sẽ đúng chỗ.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Độ phức tạp về thời gian của $ addToset so với $ push khi phần tử không tồn tại trong Mảng

  2. Không thể ghi bộ đệm vào MongoDB GridFS

  3. Tại sao gridfs get không hoạt động trên id tệp (ObjectId) chỉ bằng tên tệp

  4. Thuộc tính đối tượng MongoDB $ tồn tại trong mảng lồng nhau

  5. Truy vấn MongoDB trong kho lưu trữ Spring:giới hạn số lượng bản ghi sau khi lọc