Как я могу вернуть определенную часть документа JSON? - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть функция Azure, которая запрашивает у CosmosDB документы, содержащиеся в коллекции:

module.exports = function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');

if (context.bindings) {
  var doc = context.bindings.inputDocument;

  context.log('Get ready');
  context.res = {status: 200, body: doc};
  context.log(context.res);
}
else {
  context.res = {
    status: 400,
    body: "Something went wrong"
  };
}
context.done();
};

Этот запрос возвращает все, где я просто ищу определенный элемент, который нужно вернуть.Как я могу реорганизовать это, чтобы просто вернуть некоторые элементы?Я пробовал что-то вроде использования:

doc.id

Вот структура json sql api сконфигурированного cosmosdb:

{
 "id": "1",
 "drink": "gin_and_tonic",
 "ingredients": [
   "2 ounces gin",
   "2 lime wedges",
   "3–4 ounces tonic water"
   ],
 "directions": "Add gin to a highball glass filled with ice. Squeeze in 
lime wedges to taste, then add them to glass. Add tonic water; stir to 
combine.",
 "glass": [
   "highball",
   "hurricane"
   ],
 "image": "https://images.unsplash.com/photo-1523905491727-d82018a34d75? 
   ixlib=rb- 
     0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=52731e6d008be93fda7f5af1145eac12&auto=fo 
   rmat&fit=crop&w=750&q=80"
}

Вместо doc, но это ничего не возвращает.Я также пытаюсь использовать модуль @ azure / cosmos npm, но он кажется немного излишним и, похоже, не использует ввод, определенный в функции напрямую.Есть идеи?

1 Ответ

0 голосов
/ 17 декабря 2018

var doc = context.bindings.inputDocument; входная привязка представляет собой массив документов, даже если есть только один документ.Вот почему doc.id ничего не возвращает.

Два решения:

  1. Фильтруйте в ответ как то, что вы пытались.

    var doc = context.bindings.inputDocument;
    var idArray = [];
    for (var i = 0; i < doc.length; i++) {
        idArray.push(doc[i].id);
    }   
    
    context.log('Get ready');
    context.res = {status: 200, body: idArray};
    context.log(context.res);
    
  2. Фильтр в запросе.Перейдите к function.json, в привязке к cosmosdb, добавьте "sqlQuery": "SELECT c.id FROM c" вот так

    {
      "name": "inputDocument",
      "type": "cosmosDB",
      "direction": "in",
      "databaseName": "DBNAME",
      "collectionName": "COLLECTIONNAME",
      "connectionStringSetting": "CosmosDBConnectionString",
      "sqlQuery": "SELECT c.id FROM c"
    }
    

    , и вы можете использовать оригинальный код context.res = {status: 200, body: doc}; для получения желаемых предметов.

...