0

我正在使用 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="" 空值的记录,如果代码未定义,尽管它返回所有那些没有的文档' t 包含代码。

不久我不想要那些具有空字符串或空字符串或未定义值的记录,我可以通过IS_DEFINED, IS_NULL, NOT IS_NULL关键字来解决它,但我不想在所有查询中使用它,因为它使我的查询结构变得复杂,所以我想立即应用它,所以我不应该为任何地方的各种检查而烦恼,这会减少我的努力。

4

1 回答 1

1

您可以编写一个包含所有情况的 UDF - 空字符串、空值和未定义,并在查询中调用它。

  1. 使用CreateUserDefinedFunction注册IsMissing如下 UDF
  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;
}
于 2017-03-06T19:34:27.190 回答