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

Làm cách nào để sử dụng $ elemMatch trên phép chiếu tổng hợp?

Khá về câu hỏi cũ nhưng theo nghĩa đen thì không có câu trả lời nào được đề xuất là tốt.

TLDR :

Bạn không thể sử dụng $ elemMatch trong giai đoạn $ project. nhưng bạn có thể đạt được kết quả tương tự bằng cách sử dụng các toán tử tổng hợp khác như $ filter.

db.itens.aggregate([
    {
        $project: {
            compList: {
               $filter: {
                input: "$complist",
                as: "item",
                cond: {$eq: ["$$item.a", 1]}
               }
            }
        }
    }
])

Và nếu bạn chỉ muốn mục đầu tiên từ mảng phù hợp với điều kiện tương tự như $ elemMatch, bạn có thể kết hợp $ arrayElemAt

Giải thích chuyên sâu :

Trước tiên, hãy hiểu về $ elemMatch:

$ elemMatch là một biểu thức truy vấn trong khi phiên bản chiếu này của nó cũng tồn tại, nó đề cập đến một phép chiếu truy vấn chứ không phải giai đoạn tổng hợp $ dự án.

Vậy thì sao? cái này có liên quan gì đến cái gì không giai đoạn $ project có cấu trúc đầu vào nhất định mà nó có thể có trong khi giai đoạn chúng tôi muốn sử dụng là:

:

Biểu thức hợp lệ là gì?

Biểu thức có thể bao gồm các đường dẫn trường, các ký tự, các biến hệ thống, các đối tượng biểu thức và các toán tử biểu thức. Các biểu thức có thể được lồng vào nhau.

Vì vậy, chúng tôi muốn sử dụng một toán tử biểu thức, nhưng như bạn có thể thấy từ $elemMatch của tài liệu không phải là một phần của nó. do đó, nó không phải là một biểu thức hợp lệ để được sử dụng trong một tập hợp $project sân khấu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mô hình tốt nhất để biểu diễn nhiều mối quan hệ với các thuộc tính trong MongoDB

  2. Làm thế nào để truy vấn các đối tượng lồng nhau?

  3. Không thể xác thực trên mongodb bằng PHP

  4. MongoDB:tìm giá trị trong Mảng với nhiều tiêu chí

  5. MongoDB - phân trang