Nếu bạn chỉ lọc một phần tử trong một mảng, ngay cả khi chỉ một phần tử khớp, toàn bộ mảng sẽ được trả về và không có gì sẽ được trả về nếu không có phần tử trùng khớp. Do đó, bạn cần tách mảng của mình thành các tài liệu khác nhau bằng cách sử dụng $unwind
và chỉ sau nó, cố gắng lọc kết quả bằng cách sử dụng $match
.
Truy vấn sau có thể giải quyết vấn đề của bạn :
db.collection.aggregate([
{"$unwind": "$product"},
{"$match": {"product.name": "FirstWarehouseName1"}} // replace here with the name you want
])
Làm việc mongoplayground
Nếu tôi có thể, chỉ là một mẹo :Bạn nên lưu trữ mỗi sản phẩm trong một tài liệu khác nhau, mặc dù MongoDB không có phân vùng và cho phép chúng tôi có hầu hết mọi định dạng tài liệu, hãy nhớ rằng mỗi tài liệu phải chứa tương đương với một hàng thông tin trong cơ sở dữ liệu quan hệ thông thường. Nếu không, bạn sẽ bắt đầu gặp những vấn đề này và thêm vào đó là các vấn đề về hiệu suất.