使用Node.js过滤dynamoDB的表达式

6rvt4ljy  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(97)

我有这样的数据

{
    "ZipCode": 896754,
    "TruckDetails":[
        {
            "truckName":"classic",
            "TruckType":"mini truuck",
            "nos":12
        },
        {
            "truckname":"retro",
            "TruckType":"box",
            "nos":9
        }
    ]
},
{
    "ZipCode": 12234,
    "TruckDetails":[
        {
            "truckName":"test",
            "TruckType":"van",
            "nos":2
        }
    ],
}

现在,我想通过TruckType键过滤数据,通过使用包含表达式,它每次都返回空值,因为数组有一个键和一个值,我如何通过TruckDetails内部的键进行过滤

wf82jlnq

wf82jlnq1#

这不是你可以在DynamoDB中做的事情。您实际上是在询问DynamoDB某个Map列表中是否包含字符串值,但DynamoDB检查的是Map,而不是Map中的字符串。
您可以这样做,这将在您检查列表中的Map时返回一个响应。

myMap =  {
            "truckname":"retro",
            "TruckType":"box",
            "nos":9
        }

contains(TruckDetails, :myMap)

为了克服这个问题,您应该将数据反规范化,以便每个项目都有一辆卡车,而不是一个项目有一个卡车列表:
| PK| SK|类型|名称|
| --|--|--|--|
| 896754 | 12 |经典|小型特鲁克|
| 896754 | 9 |复古|框|
然后你在Type上创建一个索引,你可以得到一个与这些类型匹配的卡车列表。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

相关问题