【问题标题】:How to OR Query for contains in Dynamoose?如何 OR 查询 Dynamoose 中的包含项?
【发布时间】:2020-05-19 05:55:06
【问题描述】:

我想从 DynamoDB 的列中搜索(查询)一堆字符串。使用 Dynamoose https://github.com/dynamoose/dynamoose 但它什么也不返回。如果允许这种类型的查询或者是否有其他相同的语法,你能帮忙吗?

代码示例

Cat.query({"breed": {"contains": "Terrier","contains": "husky","contains": "wolf"}}).exec()

我想要所有这些品种,所以这些是 OR 查询。请帮忙。

【问题讨论】:

    标签: dynamoose


    【解决方案1】:

    这里有两个主要的事情。

    首先。 DynamoDB 中的查询要求您搜索给定的 hasKey 等于某物的位置。这必须是表的 hashKey 或索引的 hashKey。因此,即使您可以使其正常工作,查询也会失败。因为你不能为那件事做多个等于。它必须是hashKey = _______。没有or 语句或第一个条件或搜索的任何内容。

    第二。只是为了回答你的问题。您正在寻找的似乎是 condition.in 函数。基本上,这会将您的代码更改为如下所示:

    Cat.query("breed").in(["Terrier", "husky", "wolf"]).exec()
    

    当然。由于第一点,上面的代码将工作。

    如果你真的想强制它工作。您可以使用Model.scan。所以基本上在语法中将query 更改为scan`。但是,大规模的数据库扫描操作非常繁重。它会在应用过滤器之前查看每个文档/项目,然后将其返回给您。所以你没有得到你通常会得到的优化。如果您的表中只有少数或几个文档/项目,那么降低性能可能是值得的。在其他情况下,例如导出或备份数据,它也很有意义。但是,如果您能够避免扫描操作,我会的。可能需要重新考虑您的数据库结构。

    Cat.scan("breed").in(["Terrier", "husky", "wolf"]).exec()
    

    所以上面的代码可以工作,我认为这就是您所要求的,但请记住您在这里所承受的性能和成本损失。

    【讨论】:

    • 感谢您的详细说明。它澄清了,但我当然不会为了性能而部署它。
    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多