如何在 Azure 表存储中查找与值数组不匹配的记录?
Posted
技术标签:
【中文标题】如何在 Azure 表存储中查找与值数组不匹配的记录?【英文标题】:How do I find records in Azure table storage that don't match an array of values? 【发布时间】:2014-08-24 23:56:15 【问题描述】:我正在尝试在 Azure 移动服务上执行“doesNotContainAllObjectsInArray”类型的操作。例如,假设我有一个名为 Number
的表,在该表中有这些记录,这些记录具有以下“数字”值:11111、22222、33333、44444。
我希望能够编写一个查询,允许我传入一个我特别不想要的数字数组,例如:[11111,44444]
应该让我使用[22222, 33333]
。
我尝试在我的 where
运算符中使用 javascript,但我收到一条错误消息,指出不支持该表达式。这是我尝试过的:
var numberTable = tables.getTable('Number');
var ignoreNumbers = ['11111', '44444'];
numberTable.where(function(numbers)
return (numbers.indexOf(this.number) > -1);
, ignoreNumbers).read(
success: function(foundNumbers)
console.log('Found ' + foundNumbers.length + ' numbers!');
,
error: function(error)
console.error('Error with query! ' + error);
);
注意:我无法对 ignoreNumbers 值进行硬编码,因为该数组是从之前的查询中生成的。
谁能推荐我如何执行这样的查询?我需要构建一个 SQL 语句并使用mssql
执行它吗? (......甚至可以使用表存储吗?)
【问题讨论】:
【参考方案1】:您正在描述Table Queries 中不支持的 SQL 除外运算符。我发现这样做的唯一方法是将表加载到内存中(由于大小的原因通常不可行),然后使用 LINQ 执行例外查询。
【讨论】:
谢谢!不幸的是,我使用的是 Azure 移动服务,所以我被限制使用 JavaScript,所以不能选择 LINQ。【参考方案2】:我设法通过创建一个 SQL 查询并通过 request.service.mssql
对象执行它来解决这个问题,如下所示:
SELECT * FROM Number WHERE (number != '11111' && number != '22222')
查询的 WHERE 部分是通过迭代 ignoreNumbers
数组并通过字符串连接构建 SQL 语句来构建的。
不确定这是否是世界上最有效的方法,但实际上只有几个数字(可能是 5-10),而且到目前为止它似乎有效。
【讨论】:
以上是关于如何在 Azure 表存储中查找与值数组不匹配的记录?的主要内容,如果未能解决你的问题,请参考以下文章