Intressant..Problemet är...operatorerna $in och $or appliceras på elementen i arrayen som du jämför mot varje dokument i samlingen, inte på elementen i arrayerna i dokumenten.. För att sammanfatta din fråga:Du vill att det ska vara en matchning, om något av dokumenten i samlingen råkar vara en delmängd av den passerade arrayen. Jag kan inte komma på något sätt att göra detta om du inte byter indata och utdata. Vad jag menar är..Låt oss ta din första inmatning:
db.test.find( {a: [1,2,3,4]} );
Överväg att lägga detta i en tillfällig samling, säg,temp som:db.temp.save( {a: [1,2,3,4]} );
Getera nu över varje dokument i testsamlingen och 'hitta' det i temp, med $all-operatören för att säkerställa att det är helt inneslutet, d.v.s. gör något så här:foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
Detta är definitivt en lösning! Jag är inte säker på om jag saknar någon annan operatör som kan göra det här jobbet.