当前位置: 首页 > 知识库问答 >
问题:

类似DynamoDB的“%”(包含)使用对象NodeJS中的键对对象数组进行搜索

锺离正祥
2023-03-14

我试图在DynamoDB上使用“LIKE”搜索,在这里我有一个使用nodejs的对象数组

通过查看文档和我看到的其他相关帖子,可以使用CONTAINS参数来实现这一点。

我的问题是-我是否可以在DynamoDB中对所有项目运行扫描或查询,其中对象中的值类似于“test2”。

这是我的发电机桌

这就是JSON的外观:

{
  "items": [
    {
      "description": "Test 1 Description",
      "id": "86f550e3-3dee-4fea-84e9-30df174f27ea",
      "image": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/86f550e3-3dee-4fea-84e9-30df174f27ea.jpg",
      "live": 1,
      "status": "new",
      "title": "Test 1 Title"
    },
    {
      "description": "Test 2 Description",
      "id": "e17dbb45-63da-4567-941c-bb7e31476f6a",
      "image": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/e17dbb45-63da-4567-941c-bb7e31476f6a.jpg",
      "live": 1,
      "status": "new",
      "title": "Test 2 Title"
    },
    {
      "description": "Test 3 Description",
      "id": "14ad228f-0939-4ed4-aa7b-66ceef862301",
      "image": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/14ad228f-0939-4ed4-aa7b-66ceef862301.jpg",
      "live": 1,
      "status": "new",
      "title": "Test 3 Title"
    }
  ],
  "userId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}

我正在尝试执行一个扫描/查询,它将检查所有用户(每一行),检查所有项目,并返回描述类似于“测试2”的所有实例。

我已经尝试了以下不同的扫描方式:

{
      "TableName": "my-table",
      "ConsistentRead": false,
      "ExpressionAttributeNames": {
        "#items": "items",
      },
      "FilterExpression": "contains (#items, :itemVal)",
      "ExpressionAttributeValues": {
        ":itemVal": 
        {
          "M": {
            "description": {
              "S": "Test 2 Description"
            },
            "id": {
              "S": "e17dbb45-63da-4567-941c-bb7e31476f6a"
            },
            "image": {
              "S": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/e17dbb45-63da-4567-941c-bb7e31476f6a.jpg"
            },
            "live": {
              "N": "1"
            },
            "status": {
              "S": "new"
            },
            "title": {
              "S": "Test 2 Title"
            }
          }
        }
      }
    }

上面的扫描是有效的,但正如您所看到的,我正在以ExpressionAttributeValues的形式传入整个对象,我要做的只是传入描述,例如下面这样的内容(它不起作用,并且未返回任何项)。

{
      "TableName": "my-table",
      "ConsistentRead": false,
      "ExpressionAttributeNames": {
        "#items": "items.description",
      },
      "FilterExpression": "contains (#items, :itemVal)",
      "ExpressionAttributeValues": {
        ":itemVal": 
        {
          "S": "Test 2"
        }
      }
    }

或者,是否最好创建一个单独的表,其中所有项目都被添加,并通过userId链接?我一直认为每个应用程序应该有一个表,但在这种情况下,我认为如果我把所有的项目数据都放在顶层,扫描它会更安全、更快。

共有1个答案

谷良弼
2023-03-14

因此,自从发布以来,我有近200个观点,没有任何回应,我已经想出了一个解决方案,它不能立即解决最初的问题(我真的不认为它可以解决),但已经想出了另一种方法。

首先,我不想要两个表,因为这似乎有些过分,我也不想要与两个表相关联的aws成本。

这导致我用前缀来重组主键,我可以使用“BEGINS_WITH”Dynamodb选择器查询来搜索这些前缀。

用户将被添加为U{USER\U ID},项目将被添加为I{USER\U ID}{ITEM\U ID},这样我只有一个表要管理和支付,这允许我运行带有“U_”的BEGINS\U以获得用户列表或“I_”以获得项目列表。

然后,我将把项目数据展平为字符串,这样我就可以对任何项目数据运行“包含”搜索。这也允许我在项目的主键上运行包含{USER_ID}搜索,这样我就可以获得特定用户的项目列表。

希望这能帮助任何可能遇到同样问题的人。

 类似资料:
  • 问题内容: 好的,所以我试图从我用来学习Java的书中进行练习。这是我到目前为止的代码: 以下是确切措词的练习: 修改类Calculator.java,以将所有数字按钮保留在声明为10个元素的数组中,如下所示: 替换从10开始的行 带有创建按钮并将其存储在此数组中的循环。 好的,所以我尝试使用声明数组,但这给了我错误: 这行有多个标记- 按钮无法解析为类型- 按钮无法解析为类型 相反,我尝试了这个

  • 问题内容: 我想知道jQuery如何构造其类似数组的对象。我试图解决的关键问题是如何设法使控制台将其解释为数组并将其显示为数组。我知道它与length属性有关,但是在玩了一点之后我还是不太清楚。 我知道,与普通的数组(如下面的示例)相比,它没有技术优势。但是我认为这是用户进行测试和调试时的重要语义元素。 像对象一样的普通数组。 jQuery输出的位置 如果你跑 jQuery对象的原型特别有趣,因为

  • 问题内容: 好的,这是一个棘手的问题。我有一套清单。我想按顺序对集合中的对象进行排序。 想象每个场景都压抑着学校的一堂课。每个集合包含人物对象。人员对象具有名称的字符串值。在遍历并写下来之前,我想按名称排列集合中的人物。 是否有任何使用或类似的方法可以实现此目的? 我确实知道班上2个以上的孩子可能使用相同的名字,但请忽略此 问题答案: A 没有 排序的 概念,因为它是一个集合。 您可以使用按类实现

  • 问题内容: 在我的程序中,创建了一个固定长度[7]个对象的数组,每个对象都是一个包含3 ,an 和an的类。这些值是从.txt文件中读取的,并基于的值添加到数组的特定索引中。.txt文件中的条目较少,然后数组中存在索引,因此该数组最终看起来像这样: 后来在节目中,我需要的基础上平均的排序的数组中。我有一个工作方法返回这个,但是当我尝试使用数组进行排序和我开始得到这些错误的一个长长的清单: 我的方法

  • 有人知道一种方法(如果可能的话也可以使用lodash)通过对象键对对象数组进行分组,然后根据分组创建新的对象数组吗?例如,我有一个汽车对象数组: 我想制作一个由分组的新汽车对象数组:

  • 问题内容: 我正在寻找一种在elasticsearch中进行 精确 数组匹配的方法。假设这些是我的文件: 有没有一种方法可以搜索所有类别 完全相同或完全不同 的“ c”和“ d”文档(文档1和5)? 另外,搜索“其中一个”类别还是应该可行的(例如,您可以搜索“ c”并获得1、2、3和5) 有解决这个问题的聪明方法吗? 问题答案: 如果您有一组离散的已知类别,则可以使用布尔查询: 否则,我认为,可能