Предотвратить возвращение всех документов Cosmos DB до тех пор, пока они не будут запрошены в функции Azure - PullRequest
0 голосов
/ 25 октября 2019

Я написал функцию Azure, которая наполовину проходит через функцию, создает запрос документа CosmosDb и выполняет его для поиска документа в коллекции.

Поскольку у меня есть привязка для CosmosDB, указанная безПредоставляется запрос Id или Sql. Получает ли это всю коллекцию по умолчанию? Если да, есть ли способ предотвратить это, поскольку я хочу запрашивать коллекцию только после того, как построю запрос документа и верну результат.

Нужно ли указывать направление ввода-вывода для достижения этого?

   public static class SynchroniseMemberData
{

    [FunctionName("SynchroniseMemberData")]
    public static void Run([EventGridTrigger] EventGridEvent eventGridEvent, ILogger log,
        [CosmosDB(
                databaseName: "MembersData",
                collectionName: "Members",
                ConnectionStringSetting = "offers_DOCUMENTDB"),
        ]
        DocumentClient client,
        [CosmosDB(
            databaseName: "MembersData",
            collectionName: "Members",
            ConnectionStringSetting = "offers_DOCUMENTDB")
        ]
        out object document
    )
    {

        log.LogInformation(eventGridEvent.Data.ToString());

        MemberDetails memberDetails = JsonConvert.DeserializeObject<MemberDetails>(eventGridEvent.Data.ToString());
        Uri collectionUri = UriFactory.CreateDocumentCollectionUri("MembersData", "Members");
        var query = client.CreateDocumentQuery<Document>(collectionUri).Where(p => p.Id == memberDetails.id);
        var member = query.AsEnumerable().FirstOrDefault();

        if (member == null)
        {
            document = new
            {
               //Create New Member
            };
        }
        else
        {
           //update member details and save back
            document = member;
        }

    }

1 Ответ

1 голос
/ 25 октября 2019

Нет, извлечение DocumentClient не запрашивает коллекцию.

В коде Bindings , когда вы запрашиваете DocumentClient, он использует CosmosDBClientBuilder для полученияDocumentClient экземпляр значений атрибута:

rule.BindToInput<DocumentClient>(new CosmosDBClientBuilder(this));

CosmosDBClientBuilder получит DocumentClient экземпляр из внутреннего кэша.

ICosmosDBService service = _configProvider.GetService(resolvedConnectionString, attribute.PreferredLocations, attribute.UseMultipleWriteLocations, attribute.UseDefaultJsonSerialization);
return service.GetClient();
...