MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

corrispondenza dell'array mongodb

Interessante..Il problema è..gli operatori $in e $or vengono applicati agli elementi dell'array che stai confrontando contro ogni documento nella raccolta, non sugli elementi degli array nei documenti.. Per riassumere la tua domanda:vuoi che sia una corrispondenza, se uno qualsiasi dei documenti nella raccolta è un sottoinsieme dell'array passato. Non riesco a pensare a un modo per farlo a meno che non scambi il tuo input e output. Quello che voglio dire è... Prendiamo il tuo primo input:

db.test.find( {a: [1,2,3,4]} );

Considera di inserirlo in una raccolta temporanea say,temp as:

db.temp.save( {a: [1,2,3,4]} );

Ora esegui l'iterazione su ogni documento nella raccolta di test e 'trovalo' in temp, con l'operatore $all per assicurarti che sia completamente contenuto, ad esempio, fai qualcosa del genere:

foreach(doc in test)
{ db.temp.find( { a: { $all: doc.a } } ); }


Questa è sicuramente una soluzione alternativa! Non so se mi manca un altro operatore in grado di svolgere questo lavoro.