Почему запрос documentdb возвращает данные с неопределенным или пустым значением?

Я использую documentdb и выполняю запрос documentdb. мой пример запроса выглядит так:

studentQuery = {
        query: 'SELECT * FROM root r WHERE (r.userid=@userid OR r.code=@code) AND r.collectionName="students"',
        parameters: [{
            name: '@userid',
            value: userid
        }, {
            name: '@code',
            value: code
        }]
    };

Теперь проблема в том, что, если я передаю только userid="piyush123" и code= "", то он возвращает мне все те записи, которые имеют пустое значение code= "", если код не определен, хотя он возвращает все те документы, которые не ' не содержать код.

Вскоре я не хочу те записи, которые имеют нулевую или пустую строку или неопределенное значение, я могу разрешить его с помощью IS_DEFINED, IS_NULL, NOT IS_NULL своего рода ключевые слова, но я не хочу использовать его во всех запросах, потому что это усложняет структуру моего запроса, поэтому я хочу применить его сразу, чтобы не беспокоиться обо всех видах проверок везде, которые могут уменьшить мои усилия.

1 ответ

Решение

Вы можете написать UDF, который охватывает все регистры - пустую строку, null и undefined и вызывать это в запросе.

  1. Зарегистрировать IsMissing UDF, как показано ниже, используя CreateUserDefinedFunction
  2. Используйте в запросе по имени. Например, SELECT * FROM c WHERE udf.IsMissing(c.code) AND ...

Вот простая реализация IsMissing:

function isMissing(doc, prop) {
  if (typeof doc[prop] === "undefined") {
    return true;
  } 

  if (doc[prop] === "" || doc[prop] === null) {
    return true;
  }

  return false;
}
Другие вопросы по тегам