Node.js DynamoDB查询相当于;作者在哪里?“…”;?
给定以下数据结构Node.js DynamoDB查询相当于;作者在哪里?“…”;?,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,给定以下数据结构 { "author": "USERNAME", "caption": "Caption of video", "createdAt": 1531260177951, "id": "03290200-848d-12e8-a1b5-bb9570f524f1", // Current primary key "s3Bucket": "s3-bucket-name", "s3Key": "USERNAME/1521260163051.mp
{
"author": "USERNAME",
"caption": "Caption of video",
"createdAt": 1531260177951,
"id": "03290200-848d-12e8-a1b5-bb9570f524f1", // Current primary key
"s3Bucket": "s3-bucket-name",
"s3Key": "USERNAME/1521260163051.mp4",
"updatedAt": 1531260177951
}
我正在尝试编写一个查询,它在其他语言中非常简单,比如SQL或MongoDB
Mongo:db.getCollection(“视频”).find({author:{$in:[“USER1”,“USER2”,“…]}})。sort({createdAt:1})
SQL:SELECT*从视频中,作者在('USER1',USER2',…)中按createdAt排序
如果在author字段中添加索引,这些查询通常运行得非常快
我已经在dynamoDb中对author字段进行了索引,但是除了对字段进行相同的检查之外,似乎没有其他方法<代码>作者=:输入作者
。试图在(:author1,:author2)中执行编写操作会导致错误在KeyConditionExpression:IN
中使用的运算符无效
DynamoDB对我来说是错误的数据库吗?或者我可以利用一些智能索引/查询快速运行查询
也有类似的问题,像这样,但据我所知,它们似乎都依赖于扫描,这对于大型集合来说是次优。如果你看一下下面的内容,你可能会意识到,对于KeyConditionExpressions,只有以下操作符是有效的:EQ|LE | LT | GE | GT |以| BETWEEN
因此,这里的交易-如果您希望继续使用dynamodb,并且希望在
中为关键条件表达式执行类似于的操作,那么您必须向dynamodb发送各种请求,每次单独包含一个作者,然后在您的终端将它们组合在一起
大概是这样的:
// Considering that this docClient is the instance of aws-sdk configured for dynamodb
const TABLE = 'Videos';
const createParams = (author) => {
return {
TableName: TABLE,
KeyConditionExpression: "author = :author",
ExpressionAttributeValues: {
":author": author
}
};
}
const queryPromise = (params) => {
return new Promise((resolve, reject) => {
docClient.query(params, function (err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
}
// The list of authors
const authors = ['Vauxhall', 'Piccadilly', 'Acton', 'Milton', 'Hempsworth'];
const promises = [];
authors.forEach((author) => {
promises.push(queryPromise(createParams(author)));
});
Promise.all(promises).then(results => {
// Do your stuff here
}).catch(error => {
// Handle errors the way you would
});
这就是我害怕的。我认为dynamoDb可能不是我所做工作的最佳选择,但它似乎是无服务器/lamdb的事实标准,这有点奇怪,因为它的功能集相当有限。无论如何,非常感谢@我明白了。我与dynamodb合作了一年,我们被迫单独使用dynamodb创建一个大型、复杂的用户应用程序。我要说的是,DynamoDb仍处于成熟过程中,因此,是的,目前无法绕过其有限的功能集。