Thật thú vị..Vấn đề là.. $ in và $ hoặc các toán tử được áp dụng trên các phần tử của mảng mà bạn đang so sánh chống lại mỗi tài liệu trong bộ sưu tập, không phải trên các phần tử của mảng trong tài liệu..Để tóm tắt câu hỏi của bạn:Bạn muốn nó trùng khớp, nếu bất kỳ tài liệu nào trong bộ sưu tập xảy ra là một tập hợp con > của mảng đã truyền. Tôi không thể nghĩ ra cách nào để làm điều này trừ khi bạn hoán đổi đầu vào và đầu ra của mình. Ý tôi là..Hãy lấy thông tin đầu tiên của bạn:
db.test.find( {a: [1,2,3,4]} );
Cân nhắc đưa cái này vào một bộ sưu tập tạm thời, chẳng hạn như:
db.temp.save( {a: [1,2,3,4]} );
Bây giờ, hãy lặp lại từng tài liệu trong bộ sưu tập thử nghiệm và 'tìm' nó trong thời gian tạm thời, với toán tử $ all để đảm bảo nó được chứa hoàn toàn, tức là hãy làm như sau:
foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
Đây chắc chắn là một giải pháp thay thế! Tôi không chắc liệu mình có thiếu nhà điều hành nào khác có thể thực hiện công việc này hay không.