Interesujące...Problem polega na tym, że operatory $in i $or są stosowane do elementów tablicy, którą porównujesz przeciwko każdy dokument w kolekcji, a nie elementy tablic w dokumentach. Podsumowując swoje pytanie:chcesz, aby było zgodne, jeśli którykolwiek z dokumentów w kolekcji jest podzbiorem przekazanej tablicy. Nie mogę wymyślić sposobu, aby to zrobić, chyba że zamienisz dane wejściowe i wyjściowe. Mam na myśli to, że...Weźmy twoje pierwsze dane wejściowe:
db.test.find( {a: [1,2,3,4]} );
Rozważ umieszczenie tego w tymczasowej kolekcji say,temp jako:db.temp.save( {a: [1,2,3,4]} );
Teraz przeprowadź iterację po każdym dokumencie w kolekcji testów i „znajdź” go w temp, z operatorem $all, aby upewnić się, że jest on całkowicie zawarty, tj. zrób coś takiego:foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
To zdecydowanie obejście! Nie jestem pewien, czy brakuje mi innego operatora, który mógłby wykonać tę pracę.