问题描述
db.inventory.insertMany( [
{ item: "journal",instock: [ { warehouse: "A",qty: 5 },{ warehouse: "C",qty: 15 } ] },{ item: "notebook",instock: [ { warehouse: "C",qty: 5 } ] },{ item: "paper",qty: 60 },{ warehouse: "B",{ item: "planner",qty: 40 },{ item: "postcard",instock: [ { warehouse: "B",qty: 15 },qty: 35 } ] }
]);
我想根据仓库和数量查询库存文档。在 mongo shell 中,我会这样做:
db.inventory.find( { "instock": { $elemmatch: { qty: 5,warehouse: "A" } } } )
我将如何在 Presto 中执行此操作?
解决方法
instock
将映射到 array(row(warehouse varchar,qty double))
类型,$elemMatch
等于 Trino(以前的 Presto SQL)中的 any_match 数组函数。
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}]