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

Cách lấy lại tài liệu Gốc sau khi tổng hợp

Thuộc danh mục thủ thuật tổng hợp ngu ngốc là một kỹ thuật nhỏ thường bị bỏ qua.

Truy vấn thực hiện tất cả các nhóm xung quanh tài liệu _id, là định danh duy nhất cho tài liệu này. Vì vậy, điểm chính cần nghĩ đến là toàn bộ tài liệu thực sự là một định danh duy nhất rồi. Vì vậy, thay vì chỉ lưu trữ trong khóa _id, hãy sử dụng toàn bộ tài liệu.

    {$project: { 
        _id: { _id: "$_id", name: "$name", forms: "$forms" }, forms: "$forms"}
    },

Nơi điều này được thực hiện bất kỳ thứ gì được _id cuộn lại vẫn giữ tài liệu ở dạng ban đầu. Vào cuối tất cả các giai đoạn tổng hợp khác, hãy phát hành $ dự án cuối cùng để khôi phục hình thức tài liệu gốc thực sự:

    {$project: { _id: "$_id._id", name: "$_id.name", forms: "$_id.forms"}}

Sau đó, bạn sẽ có kết quả lọc mà bạn muốn. Kỹ thuật này có thể rất hữu ích khi được sử dụng với tính năng lọc nâng cao, chẳng hạn như trong trường hợp truy vấn này, vì nó loại bỏ sự cần thiết phải đưa ra tìm bổ sung trên tất cả các kết quả.

Ngoài ra, trong trường hợp bạn biết rằng bạn chỉ đang tìm kiếm một tập hợp các kết quả phù hợp với một tập hợp các điều kiện nhất định, hãy sử dụng $ so khớp là nhà điều hành đầu tiên giai đoạn của đường ống tổng hợp. Điều này không chỉ hữu ích trong việc giảm kích thước bộ làm việc mà còn là duy nhất giai đoạn mà bạn có thể sử dụng chỉ mục và nơi bạn có thể tăng đáng kể hiệu suất truy vấn.

Toàn bộ quá trình cùng nhau:

db.forms.aggregate([
    {$match: { "forms.status": "closed" } },
    {$project: { 
        _id: { _id: "$_id", name: "$name", forms: "$forms" }, forms: "$forms"}
    },
    {$unwind: "$forms"},
    {$group: { _id: "$_id", status: {$addToSet: "$forms.status"}}},
    {$unwind: "$status"},
    {$sort: { _id: 1, status: -1} },
    {$group: { _id: "$_id", status: {$first: "$status"} }},
    {$match: { status: "closed"}},
    {$project: { _id: "$_id._id", name: "$_id.name", forms: "$_id.forms"}}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng bản sao lưu để khắc phục các tình huống lỗi thường gặp cho MongoDB

  2. Kết quả MapReduce dường như bị giới hạn ở 100?

  3. Cách sao chép một bộ sưu tập từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong MongoDB

  4. MongoDB không bằng

  5. Các giao dịch MongoDB của Spring Data