SQLQuery не возвращает запрашиваемый документ - PullRequest
1 голос
/ 24 сентября 2019

Приложение-функция Azure с Cosmos DB + nodejs, не работающими с SQLQuery (входные данные).Документ не возвращен.

Я успешно получил комбо Id / PartionKey для возврата документа.Я пробовал много комбинаций SQL-запросов в поле ввода SQLQuery, например, из документов, но безрезультатно.Нет ошибок, ни документ не возвращается.Я ожидаю, что мой запрос будет:

SELECT * from Users where Users.UserName = '12345'

Я пробовал с и без значения в одинарных кавычках.Я пробовал жестко закодированные (без привязки) запросы, такие как:

SELECT * from Users where Users.UserName = 12345

И запросы с привязкой (с одинарными кавычками и без них вокруг {userName}):

SELECT * from Users where Users.UserName = {userName}

У меня естьпопытался использовать {userName}, поместив его в маршрут:

Account / login / {userName}

, и я также попытался использовать userName из запроса (с одинарными кавычками или без них):

SELECT * from Users where Users.UserName = '{Query.userName}'

Ключ Partion: / id

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        }
    ]
}

Я провел много часов поиска и чтения, и я понимаю, что привязка может не поддерживаться полностью с SQLQuery, однако даже жесткое кодированиезначение не возвращает документ.

Пример документа:

{
    "id": "e90ece01373e5d011fdaef2c20d9717b",
    "UserName": "17002",
    "password": "newpassword",
    "Address": "123 West ",
    "state": "FL",
    "city":  "mycity",
    "zip": "32222",
    "phoneNumber": "3215551212",
    "emailId": "email@email.com",
    "refNo": "0",
    "aboutUs": "someplace",
    ........
}

Function.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "post",
        "get"
      ],
      "route": "Account/login/{userName}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "cosmosDB",
      "name": "myInput",
      "databaseName": "cdel",
      "collectionName": "Users",
      "connectionStringSetting": "cdel_DOCUMENTDB",
      "direction": "in",
      "sqlQuery": "SELECT * FROM Users where Users.UserName = {userName}"
    }
  ]
}

index.js:

module.exports = async function (context, req, myInput) {
    context.log('JavaScript queue trigger function processed work item');
    context.log('Passed in: ' + context.bindingData.userName);
    if (!myInput)
    {
        context.log("UserName not found");
        context.res = {
            status: 400,
            body: "UserName not found."
        }
    }
    else
    {
        context.log(req.query.password);
        context.log(myInput.password);
        context.log(context.bindings.myInput.password);

        if (myInput.password != req.query.password) {
            context.res = {
                status: 400,
                body: "Invalid logon."
            }
        }
        else {
              .....
        }
    }
    context.done();
};

Ожидайте возврата одного документа.Ни один не возвращается.myInput.password = undefined

Есть ли какой-то монитор запросов, которого я не нашел, чтобы я мог видеть, что происходит?

Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Космос возвращает коллекцию, вам нужно извлечь из нее первый элемент.

context.bindings.myInput[0].password

Итак, код:

module.exports = async function (context, req) {
    context.log('password: ' + req.body.password);
    if (context.bindings.myInput.length > 0)
        context.log('password cosmos: ' + context.bindings.myInput[0].password);
    context.res = {
        body: "OK"
    };
};
0 голосов
/ 24 сентября 2019

Попробуйте

select *
from Users
where UserName = '12345678'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...