Как получить объект JSON из триггера документа «Космос БД» в функции Azure - PullRequest
0 голосов
/ 06 января 2019

В базе данных космос-монго я вставил простой документ как:

{  
    "_id" : ObjectId("5c315585e0f53d69fc3820a1"),  
    "id" : "replace_with_new_document_id",  
    "time" : 678900.43,  
    "num" : 5678  
}

Затем у меня есть набор функций Azure, запускаемый обновлениями Cosmos Mongo DB, и в итоге я получил объект документа, как показано на рисунке:

enter image description here

Мой вопрос заключается в том, как проще всего получить исходные данные JSON, т. Е. "Id", "time", "num", в мою структуру C #:

public struct info   
{  
  public string id;  
  public double time;  
  public int num;  
}

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Несмотря на то, что официальная поддержка подачи изменений API MongoDB отсутствует, если вам удастся получить документ в триггере (что, очевидно, вы можете сделать), просто сопоставьте пару значений ключа $t - $v с объект, а затем получить значение.

Я бы начал с создания класса CosmosMongoValue, который десериализует пару ключ-значение для каждого свойства.

public class CosmosMongoValue<T>
{
    [JsonProperty("$v")]
    public T Value { get; set; }

    public static implicit operator T(CosmosMongoValue<T> item)
    {
        return item?.Value;
    }
}

и тогда ваш класс Info будет выглядеть примерно так:

public class Info
{  
    [JsonProperty("id")]
    public CosmosMongoValue<string> Id;  

    [JsonProperty("time")]
    public CosmosMongoValue<double> Time;

    [JsonProperty("num")]   
    public CosmosMongoValue<int> Num;  
}

Затем просто используйте JsonConvert.DeserializeObject<CosmosMongoValue<Info>> для разбора вашего строкового документа на объект.

Вы можете либо сделать .Value, чтобы получить значение пары, либо просто использовать тип значения, чтобы автоматически получить значение из неявного оператора, который я добавил в класс CosmosMongoValue.

Результат:

enter image description here

0 голосов
/ 07 января 2019

На основании заявления в официальной статье :

Привязки Azure Cosmos DB поддерживаются только для использования с SQL API. Для всех других API Azure Cosmos DB вам необходимо получить доступ к базе данных от вашей функции с помощью статического клиента для вашего API, в том числе MongoDB API, Cassandra API, Gremlin API и Table API.

, вы пока не можете использовать функцию запуска Azure Cosmos db с mongo api.

Вы можете подписаться на этот блог, чтобы попытаться связать с вашим космосом db mongo api db:

https://www.mongodb.com/blog/post/how-to-integrate-azure-functions-with-mongodb

...