MongoDB: $expr

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