2016-10-24 3 views
0

У меня есть таблица пользователя с именем пользователя поля. Мне нужно написать что-то эквивалентное этому в dynamo db: Выберите * от пользователя, в котором имя пользователя ('a', 'b', 'c');Как использовать в операторе в dynamo db

Добавление большего количества из кода prosepective У меня есть имена пользователей в массиве say var arr = ['a', 'b', 'c'];

Я до сих пор попытался это, который дает мне нулевой результат

this.dynamo.client.scanAsync({ 
     TableName: this.dynamo.table('users'), 
     FilterExpression: 'username IN (:list)', 
     ExpressionAttributeValues: { 
      ':list': arr.toString() 
     } 
    }).then((response) => { 
     console.log(response); 
     return { 
      userFriends: result.Item.friends 
     }; 
    }); 

Когда я прохожу один элемент в массиве это дает мне результат поиска передается один элемент в таблице пользователей, но он не работает с более чем одного элемента в массив.

ответ

0

Отдельные пользователи должны указываться как переменные строки, разделенные запятой. Массив JavaScript эквивалентен типу List в AWS DynamoDB. DynamoDB не может сравнивать тип данных String в базе данных со атрибутом List (например, Array в JavaScript).

var params = { 
    TableName : "Users", 
    FilterExpression : "username IN (:user1, :user2)", 
    ExpressionAttributeValues : { 
     ":user1" : "john", 
     ":user2" : "mike" 
    } 
}; 

Построить объект из массива для FilterExpression: -

Пожалуйста, обратитесь ниже код для формирования объекта динамически на основе значения Array.

var titleValues = ["The Big New Movie 2012", "The Big New Movie"]; 
var titleObject = {}; 
var index = 0; 
titleValues.forEach(function(value) { 
    index++; 
    var titleKey = ":titlevalue"+index; 
    titleObject[titleKey.toString()] = value; 
}); 

var params = { 
    TableName : "Movies", 
    FilterExpression : "title IN ("+Object.keys(titleObject).toString()+ ")", 
    ExpressionAttributeValues : titleObject 
}; 

Примечание: -

Я не думаю, что в пункте с 1000s имен пользователей является хорошей идеей, с точки зрения производительности.

+0

сказать, что у меня есть 1000 элементов в массиве имени пользователя, так что я должен писать в 1000 раз? –

+0

Я обновил ответ для динамического формирования filterexpression и expressionattributevalues. Взгляните на это. – notionquest