MongoDB od verze 3.6 umí expressions, které, pokud jste je chtěli využívat, tak doposud jen přes agregační framework.
$expr
vám umožní sestavit dotaz, ve kterém můžete porovnávat pole, klíče toho stjeného dokumentu v prohledávané kolekci, stejně jako $match
v agregaci.
Příklad
Dejme tomu, že máme kolekci s následujícími dokumety:
{ "_id" : 1, "category" : "food", "budget": 400, "spent": 450 } { "_id" : 2, "category" : "drinks", "budget": 100, "spent": 150 } { "_id" : 3, "category" : "clothes", "budget": 100, "spent": 50 } { "_id" : 4, "category" : "misc", "budget": 500, "spent": 300 } { "_id" : 5, "category" : "travel", "budget": 200, "spent": 650 }
A dejme tomu, že chceme s kolekce získat jen ty dokumenty, kde spent
je větší než budget
. To zní logicky a jednoduše, ne?
Špatná zpráva, tedy až doposud: bez agregace jen jednoduchým query tohle nejde.
Od verze 3.6 díky $expr
ano 😀
db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )
Výsledkem pak bude následující pole dokumentů:
{ "_id" : 1, "category" : "food", "budget" : 400, "spent" : 450 } { "_id" : 2, "category" : "drinks", "budget" : 100, "spent" : 150 } { "_id" : 5, "category" : "travel", "budget" : 200, "spent" : 650 }
Holla!
Zdroj: MongoDB dokumentace