为什么documentdb查询返回未定义或空值的数据?

时间:2017-03-06 11:38:42

标签: mysql node.js azure azure-cosmosdb azure-hub

我正在使用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"和代码="",然后它返回所有那些代码=""空值,如果代码未定义,但它返回所有不包含代码的文档。

很快我就不想要那些空字符串或空字符串或未定义值的记录,我可以通过IS_DEFINED, IS_NULL, NOT IS_NULL种关键字来解决它,但我不想在所有关键字中使用它查询导致它使我的查询结构变得复杂,所以我想立即应用它,所以我不应该在任何地方打扰所有可以减少我努力的检查。

1 个答案:

答案 0 :(得分:1)

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

  1. 使用CreateUserDefinedFunction
  2. 注册IsMissing UDF,如下所示
  3. 按名称在查询中使用。例如,SELECT * FROM c WHERE udf.IsMissing(c.code) AND ...
  4. 这是IsMissing的简单实现:

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