Interessante.. O problema é que os operadores $in e $or são aplicados nos elementos do array que você está comparando contra cada documento na coleção, não nos elementos das matrizes nos documentos. Para resumir sua pergunta:Você quer que seja uma correspondência, se algum dos documentos da coleção for um subconjunto da matriz passada. Não consigo pensar em uma maneira de fazer isso, a menos que você troque sua entrada e saída. O que quero dizer é... Vamos pegar sua primeira entrada:
db.test.find( {a: [1,2,3,4]} );
Considere colocar isso em uma coleção temporária, digamos,temp as:
db.temp.save( {a: [1,2,3,4]} );
Agora itere sobre cada documento na coleção de teste e 'encontre-o' em temp, com o operador $all para garantir que ele esteja completamente contido, ou seja, faça algo assim:
foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
Esta é definitivamente uma solução alternativa! Não tenho certeza se estou faltando algum outro operador que possa fazer este trabalho.