如何在 DocumentDB for NodeJS 的 sql 查询中传递函数?

How to pass function in sql query of DocumentDB for NodeJS?

问题 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
        }]
    };

但问题是这个查询不是 运行ning 抛出错误。

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

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

我想运行查询where medium=german,我不想通过level=2nd,我怎么能运行这个查询?

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

  1. 首先在集合中使用 createUserDefinedFunction 注册 UDF,名称类似于 myUserDefinedFunction。
  2. 然后您可以在查询中按名称使用它,例如SELECT * FROM root r WHERE udf.myUserDefinedFunction(r.users, @userid) AND r.id=@id

Q2。这应该有效(未经测试):

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