3

我有一个 JSON 文档存储在一个名为 doc 的属性中,看起来像这样:

{
    doc:  
        {
            "foo": 
                {
                     "bar": "baz"
                }
         }
}

我希望能够对 data.foo.bar == "baz" 进行表扫描和过滤/搜索。我正在使用 Java SDK 并尝试了以下代码,但它似乎不适用于文档的子图:

String filterExpression = "#d.#f.#b = :val";
Map<String, String> nameMap = new HashMap();
nameMap.put("#d", "doc");
nameMap.put("#f", "foo");
nameMap.put("#b", "bar");
Map valueMap = new HashMap();
valueMap.put(":val", "baz");
ItemCollection<ScanOutcome> items = table.scan(
    new ScanSpec()
        .withFilterExpression(filterExpression)
        .withNameMap(nameMap)
        .withValueMap(valueMap));

编辑 - 我发现这有效:

String filterExpression = "#d.foo.bar = :val";

对于它起作用的第一个属性,我只有一个 ExpressionAttributeNames。有什么想法为什么它不适用于 3 ExpressionAttributeNames?如果碰巧我需要 3,即它们是保留字怎么办?

非常感谢任何帮助或建议。谢谢。

4

0 回答 0