2016-10-24 3 views
0

フィールドユーザー名を持つユーザーテーブルがあります。私はこれに相当するものをdynamo dbに書く必要があります:ユーザーからの*を選択してください( 'a'、 'b'、 'c');dynamo dbの演算子での使用方法

proseptedよりコードを追加するには、配列にユーザー名があります。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配列は、AWS DynamoDBデータ型のListと同等です。 DynamoDBはデータベース内のStringデータ型とList属性(JavaScriptのArray)を比較できません。

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

FilterExpressionの配列からオブジェクトを構築: -

動的配列値に基づいてオブジェクトを形成するための以下のコードを参照してください。

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 
}; 

注: -

私はユーザ名の1000でIN句とは思わないが、パフォーマンスの面では良いアイデアです。

+0

私はユーザー名配列に1000要素があると言うので、1000回書く必要がありますか? –

+0

filterexpressionとexpressionattributevaluesを動的に作成する答えを更新しました。それを見てみましょう。 – notionquest

関連する問題