2016-09-02 2 views
0

Я пытаюсь сделать Postgres или Mongo, как запрос IN с DynamoDB.DynamoDB IN Query

Учитывая У меня есть структура данных, как это:

{ 
    type: 'a' 
}, 
{ 
    type: 'b' 
}, 
{ 
    type: 'c' 
} 

Как я могу сканировать, например, все «а» и «б»?

Я пытался что-то вроде этого:

docClient.scan({ 
    TableName: 'Exmaple', 
    FilterExpression: 'type IN (:var)', 
    ExpressionAttributeValues: { 
     ':var': docClient.createSet(['a','b']) 
    } 
}); 

Но это просто ничего не возвращает.

Заранее благодарим за помощь и помощь.

+0

Что вы hashkey? Справедливо ли считать, что атрибут типа определяется как hashkey? – notionquest

ответ

0

Основываясь на структуре данных, предоставленной в вопросе, я предполагаю, что атрибут «тип» определяется как тип данных «STRING» (например, S) типа Dynamodb, а не SET (т. Е. SS).

Обратите внимание, что IN может использоваться на Dynamodb SET тип данных только.

IN: Проверяет соответствие элементов в двух наборах. AttributeValueList может содержать один или несколько элементов AttributeValue типа String, Число или двоичный (не заданный тип). Эти атрибуты сравниваются с существующим атрибутом типа набора элемента. Если какие-либо элементы из входного набора присутствуют в атрибуте item, выражение оценивает значение true.

Если вы определили его как строковый тип данных, вы можете проверить несколько значений атрибута с помощью «ИЛИ» состояние. Пример ниже: -

var params = { 
    TableName: "Movies",  
    FilterExpression: "title = :title1 OR title = :title2", 
    ExpressionAttributeValues: { 
     ":title1": "The Big New Movie 1", 
     ":title2": "The Big New Movie 2", 
    } 
}; 

Тип данных Dynamodb SET должен выглядеть следующим образом: -

enter image description here

+0

Спасибо за быстрый ответ. Я использовал «OR» решение, работает как шарм :-) –

+0

Не могли бы вы принять ответ? – notionquest