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

Modo per attraversare in profondità un oggetto Groovy con un punto nella stringa usando GPath

Sulla base del bug/thread, sembrerebbe che ci siano alcuni problemi di ambiguità con il supporto di una funzione di accesso alla proprietà punteggiata. Sulla base del thread della mailing list, sembrerebbe che valutare la stringa queryField sarebbe la soluzione migliore:

def result = [a: [b: [c: 42]]]
def queryString = 'a.b.c'

def evalResult = Eval.x(result, 'x.' + queryString)
assert evalResult == 42

Script su Groovy Web Console

Il thread della mailing list è un po' vecchio, quindi c'è una nuova classe Eval (a partire dalla 1.7.2) che può aiutare con l'esecuzione di piccoli frammenti che non hanno un'associazione grande.

Altrimenti, puoi dividere la stringa ed eseguire ricorsivamente valutazioni delle proprietà sull'oggetto, riproducendo efficacemente un sottoinsieme del comportamento di attraversamento di GPath.