Interesante... El problema es... que los operadores $in y $or se aplican a los elementos de la matriz con los que está comparando contra cada documento en la colección, no en los elementos de las matrices en los documentos... Para resumir su pregunta:desea que sea una coincidencia, si alguno de los documentos en la colección resulta ser un subconjunto de la matriz pasada. No puedo pensar en una manera de hacer esto a menos que intercambie su entrada y salida. Lo que quiero decir es... Tomemos tu primera entrada:
db.test.find( {a: [1,2,3,4]} );
Considere poner esto en una colección temporal, por ejemplo, temp como:db.temp.save( {a: [1,2,3,4]} );
Ahora itere sobre cada documento en la colección de prueba y 'búsquelo' en temp, con el operador $all para asegurarse de que esté completamente contenido, es decir, haga algo como esto:foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
¡Esta es definitivamente una solución! No estoy seguro si me falta algún otro operador que pueda hacer este trabajo.