2017-03-06 83 views
0

我正在使用documentdb &运行documentdb的查询。我的样本查询看起来像:为什么documentdb查询返回未定义或空值的数据?

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

现在的问题是,如果我只传递用户id =“piyush123”和码=“”,则返回我所有的记录具有码=“”空值如果代码未定义,但它返回所有不包含代码的文档。

我不希望那些有空或空字符串或未定义值的记录,我可以通过IS_DEFINED, IS_NULL, NOT IS_NULL类型的关键字来解决它,但我不想在所有查询中使用它,因为它使我的查询结构复杂,所以我想立即应用它,所以我不必担心任何可以减轻我努力的各种检查。

回答

1

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

  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; 
} 
+0

如何写或查询及如何使用它注入UDF功能?如果你可以建议它会是可观的。 –