#javascript #azure #azure-mobile-services
#javascript #azure #azure-mobile-services
Вопрос:
Я пытаюсь выполнить операцию типа ‘doesNotContainAllObjectsInArray’ в Azure Mobile Services. Например, допустим, у меня есть таблица с именем Number
, и в этой таблице находятся записи с такими «числовыми» значениями: 11111, 22222, 33333, 44444.
Я хочу иметь возможность написать запрос, который позволит мне передать массив чисел, которые мне конкретно не нужны, например: [11111,44444]
должен выдавать мне с [22222, 33333]
.
Я пытался использовать JavaScript в моем where
операторе, но я получаю сообщение об ошибке, в котором говорится, что выражение не поддерживается. Это то, что я пробовал:
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:
Вы описываете оператор SQL Except, который не поддерживается в запросах к таблицам. Единственный способ, который я нашел для этого, — загрузить таблицу в память (часто это невозможно из-за размера), а затем использовать LINQ для выполнения запроса Except.
Комментарии:
1. Спасибо! К сожалению, я использую Azure Mobile Services, поэтому у меня ограничено использование JavaScript, поэтому LINQ не подходит.
Ответ №2:
Мне удалось решить эту проблему, создав SQL-запрос и выполнив его через request.service.mssql
объект, примерно так:
SELECT * FROM Number WHERE (number != '11111' amp;amp; number != '22222')
Часть запроса WHERE создается путем итерации ignoreNumbers
массива и построения инструкции SQL с помощью конкатенации строк.
Не уверен, что это самая эффективная вещь в мире, но на самом деле там будет всего пара чисел (возможно, 5-10), и пока это, кажется, работает.