0

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

代码示例

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

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

4

1 回答 1

4

这里有两件大事。

第一的。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()

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

于 2020-05-18T21:55:06.600 回答