如何在 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 表存储中查找与值数组不匹配的记录?的主要内容,如果未能解决你的问题,请参考以下文章

查找对 Azure 存储表的删除实体调用

如何将表单输入中的用户 ID 值与数据库中的记录相匹配?

哈希值

如何使用 JavaScript / Node js 存储对象中不匹配的字符串

使用与值GO匹配的键对地图数组进行排序

mysql 如何查找同一表中两行之间的差异并列出不匹配的记录? mysql在表中查找不匹配的行