【问题标题】:Why documentdb query returns data which is undefined or empty value?为什么 documentdb 查询返回未定义或空值的数据?
【发布时间】:2017-03-06 11:38:41
【问题描述】:

我正在使用 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 类型的关键字来解决它,但我不想在所有查询中使用它,因为它使我的查询结构复杂,所以我想一次应用它,所以我不应该在任何地方费心进行各种检查,这会减少我的工作量。

【问题讨论】:

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


    【解决方案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;
    }
    

    【讨论】:

    • 如何在查询中编写或注入UDF函数以及如何使用它?如果您能提出建议,那将是可观的。
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 2019-06-04
    • 2021-11-30
    • 2021-09-02
    • 1970-01-01
    • 2011-11-24
    • 2020-03-28
    相关资源
    最近更新 更多