Say I have the following documents:
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
I want to query on an instock document based on both warehouse and qty. In mongo shell I would do:
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
How would I do this in Presto?
instock
will be mapped to array(row(warehouse varchar, qty double))
type and $elemMatch
is equal to any_match array function in Trino (formerly Presto SQL).
select * from inventory where any_match(instock, x -> x.qty = 5 and x.warehouse = 'A');
item | instock
---------+---------------------------------------------------
journal | [{warehouse=A, qty=5.0}, {warehouse=C, qty=15.0}]