gpt4 book ai didi

node.js - DynamoDB 查询相当于 "WHERE author IN [..]"?

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:45 24 4
gpt4 key购买 nike

给定以下数据结构;

{
"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:从视频中选择 * WHERE writer IN ('USER1', USER2',...) SORT BY createAt

如果我在作者字段上添加索引,这些查询通常运行得非常快。

我已经在 dynamoDb 中对作者字段建立了索引,但似乎除了对该字段进行相等检查之外没有其他方法可以执行任何操作。 作者 = :inputAuthor。尝试执行 author IN (:author1, :author2) 会导致错误 KeyConditionExpression: IN 中使用的运算符无效

DynamoDB 是否适合我?或者也许我可以利用一些智能索引/查询来让我的查询快速运行?

还有类似的问题,比如这样; How to use “IN” statement in FilterExpression using array - dynamodb ,但据我所知,它们似乎都依赖于扫描,这对于大型集合而言并不是最佳选择。

最佳答案

如果您可以看看下面的documentation ,您可能会意识到,对于 KeyConditionExpressions,只有以下运算符有效: EQ | LE | LT |通用电气| GT | BEGINS_WITH | 开始之间

所以,事情是这样的 - 如果您希望继续使用 dynamodb,并且希望对关键条件表达式执行类似 IN 之类的操作,您必须每次都向 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
});

关于node.js - DynamoDB 查询相当于 "WHERE author IN [..]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com