如何在Azure表存储中找到与值数组不匹配的记录?

时间:2014-07-03 18:23:01

标签: javascript azure azure-mobile-services

我正在尝试执行一个' doesNotContainAllObjectsInArray'在Azure移动服务上键入操作。例如,我们假设我有一个名为Number的表格,并且在该表格中包含这些'数字'值:11111,22222,333333,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执行它? (...甚至可以使用表存储吗?)

2 个答案:

答案 0 :(得分:1)

您正在描述Table Queries中不支持的SQL Except运算符。我发现这样做的唯一方法是将表加载到内存中(由于大小通常不可行),然后使用LINQ进行Except查询。

答案 1 :(得分:0)

我设法通过创建一个SQL查询并通过request.service.mssql对象执行它来解决这个问题,如下所示:

SELECT * FROM Number WHERE (number != '11111' && number != '22222')

查询的WHERE部分是通过迭代ignoreNumbers数组并通过字符串连接构建SQL语句来构建的。

不确定它是否是世界上效率最高的东西,但实际上只有几个数字(可能是5-10个),到目前为止似乎有用。