2017-01-20 2 views
-1

Q.1: Я хочу, чтобы запустить один запрос на DocumentDB с определенным пользователем функцией,Как передать функцию в sql-запрос DocumentDB для NodeJS?

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 [email protected]', 
     parameters: [{ 
      name: '@fn', 
      value: udf 
     }, { 
      name: '@userid', 
      value: userid 
     }, { 
      name: '@id', 
      value: id 
     }] 
    }; 

Но проблема в том, что этот запрос не выполняется метание ошибки.

Q.2: У меня есть 1 объект в documentDB с массивом как:

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

Я хочу запустить запрос, где средний = немецкий, я не хочу, чтобы пройти уровень = 2-ой, как я могу работать этот запрос?

+0

Прежде всего: Пожалуйста, отделите свой вопрос на два отдельных вопроса, так как это две совершенно разные вещи. –

ответ

1

Q1. Вы должны загружать UDF самостоятельно, а не как параметр. Просто запустите его, используя соответствующий вызов SDK перед запуском этого запроса.

  1. Сначала зарегистрируйте UDF, используя createUserDefinedFunction в коллекции с именем myUserDefinedFunction.
  2. Затем вы можете использовать его внутри запроса по имени, например. SELECT * FROM root r WHERE udf.myUserDefinedFunction(r.users, @userid) AND [email protected]

Q2. Это должно работать (непроверено):

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

Я удалил свой ответ, Ларри. Твоя лучше! –

+0

Вам не нужно было делать это из вежливости. Кроме того, у вас было больше информации о том, как загрузить. Может быть, вы могли бы добавить это обратно в мой ответ? –

+0

Спасибо вам обоим, Ans.2 работает отлично для меня, но все же я не понял Ans.1, как можно усовершенствовать в коллекции, где я могу это сделать? Я использую модуль NPM Documentbuilder в NodeJS, поэтому я его не понял, не могли бы вы объяснить мне лучше? –

Смежные вопросы