Potresti usare $where
:
db.myCollection.find( { $where: "this.a1.a != this.a2.a" } )
Tuttavia, tieni presente che non sarà molto veloce, perché dovrà avviare il motore di script java e ripetere ogni singolo documento e verificarne le condizioni.
Se devi eseguire questa query per raccolte di grandi dimensioni, o molto spesso, è meglio introdurre un flag denormalizzato, come areEqual
. Tuttavia, questi campi a bassa selettività non producono una buona performance dell'indice, perché l'insieme di candidati è ancora grande.