【问题标题】:Querying an array of MongoDB Embedded/Nested Documents with Presto使用 Presto 查询 MongoDB 嵌入式/嵌套文档数组
【发布时间】:2021-04-14 12:24:11
【问题描述】:

假设我有以下文件:

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 } ] }
]);

我想根据仓库和数量查询库存单据。在 mongo shell 中我会这样做:

db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )

我将如何在 Presto 中执行此操作?

【问题讨论】:

    标签: mongodb presto trino


    【解决方案1】:

    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}]
    

    【讨论】:

    • 您好,感谢您的回答。我刚试过这个,它会返回正确的项目,但它不会在下面生成 $elemMatch 过滤器,它会加载所有数据,我认为它正在 presto 内进行过滤。我需要 $elemMatch 来利用数据库索引,这里有什么想法吗?
    • 目前,您不能。请将问题提交至github.com/trinodb/trino/issues/new
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2018-03-09
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多