在cosmos mongo DB中,我插入了一个简单的文档:
{
"_id" : ObjectId("5c315585e0f53d69fc3820a1"),
"id" : "replace_with_new_document_id",
"time" : 678900.43,
"num" : 5678
}
然后我有一个由Cosmos Mongo DB的更新触发的Azure函数集,最终得到了一个如图所示的文档对象:
我的问题是将原始JSON数据(即“ id”,“ time”,“ num”)转换为C#结构的最简单方法是什么:
public struct info
{
public string id;
public double time;
public int num;
}
答案 0 :(得分:0)
基于official article中的语句:
Azure Cosmos DB绑定仅支持与SQL API一起使用。 对于所有其他Azure Cosmos DB API,您应该访问数据库 通过使用API的静态客户端从您的函数中 MongoDB API,Cassandra API,Gremlin API和Table API。
,到目前为止,您无法在mongo api上使用azure cosmos db触发功能。
您可以关注此博客,尝试与您的cosmos db mongo api db绑定:
https://www.mongodb.com/blog/post/how-to-integrate-azure-functions-with-mongodb
答案 1 :(得分:0)
即使对MongoDB API变更供稿没有官方支持,如果您设法将文档放入触发器中(显然可以做到),则只需映射$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
类中添加的隐式运算符中自动获取值。
结果:
答案 2 :(得分:0)
获取起点ObjectId 尝试使用base64解码document.id
let orderId = new Buffer(document.id,'base64')。toString(); context.log('order id:',orderId);
在您的情况下,document.id为'NWMzMTU1ODVlMGY1M2Q2OWZjMzgyMGEx'