如何在DocumentDB的SQLDB的SQL查询中传递函数?

时间:2017-01-20 11:35:28

标签: sql node.js azure azure-cosmosdb

问题1:我想在DocumentDB上运行一个带有用户定义函数的查询

 var udf = function(users, userid) {
        var s, _i, _len;
        for (_i = 0, _len = users.length; _i < _len; _i++) {
            s = users[_i];
            if (s.userid === userid) {
                return true;
            }
        }
        return false;
    };




    conversationsQuerySpec = {
        query: 'SELECT * FROM root r WHERE @fn(r.users, @userid) AND r.id=@id',
        parameters: [{
            name: '@fn',
            value: udf
        }, {
            name: '@userid',
            value: userid
        }, {
            name: '@id',
            value: id
        }]
    };

但问题是这个查询没有运行抛出错误。

问题2:我在documentDB中有一个对象,其数组如下:

var student = {
     name: 'piyush',
     classes: [{
       level: '1st',
       medium: 'spanish'
     },{
       level: '2nd',
       medium: 'german'
     }]
}

我想运行查询,其中medium = german,我不想传递level = 2nd,我该如何运行此查询?

1 个答案:

答案 0 :(得分:1)

Q1。您必须单独上载UDF而不是作为参数。只需在运行该查询之前使用适当的SDK调用将其挂起。

  1. 首先使用名称为myUserDefinedFunction的集合中的createUserDefinedFunction注册UDF。
  2. 然后您可以按名称在查询中使用它,例如SELECT * FROM root r WHERE udf.myUserDefinedFunction(r.users, @userid) AND r.id=@id
  3. Q2。这应该工作(未经测试):

    SELECT VALUE student FROM student JOIN c in student.classes WHERE c.medium = "german"