Zajímavé..Problém je..operátory $in a $or se aplikují na prvky pole, které porovnáváte proti každý dokument v kolekci, ne na prvky polí v dokumentech.. Abychom shrnuli vaši otázku:Chcete, aby se jednalo o shodu, pokud je některý z dokumentů v kolekci náhodou podmnožinou předaného pole. Nenapadá mě způsob, jak to udělat, pokud neprohodíte svůj vstup a výstup. Chci říct, že... Vezměme váš první vstup:
db.test.find( {a: [1,2,3,4]} );
Zvažte umístění tohoto do dočasné kolekce say,temp as:db.temp.save( {a: [1,2,3,4]} );
Nyní iterujte každý dokument v testovací kolekci a „najděte“ jej v temp pomocí operátoru $all, abyste se ujistili, že je zcela obsažen, tj. proveďte něco takového:foreach(doc in test)
{
db.temp.find( { a: { $all: doc.a } } );
}
Toto je určitě řešení! Nejsem si jistý, jestli mi nechybí nějaký jiný operátor, který by tuto práci mohl dělat.