使用ObjectId的Mongo C#驱动程序

时间:2018-04-05 15:56:12

标签: c# mongodb-.net-driver

我将Guid转换为BinData时遇到了麻烦。我知道您可以使用BsonIdAttribute映射属性,但在我的情况下,我实际上需要使用我的Guid标识符的filter子句以JSON格式编写查询。

像:

mongoClient.UpdateMany(
    new JsonFilterDefinition<UserUnreadCounter>($"{{ \"Counters.EntityId\": {{ $eq: '{myGuid.ConvertToBinData()}' }} }}"),
    new JsonUpdateDefinition<UserUnreadCounter>("{ $inc: { \"Counters.$.Count\": 1 } }"));

我该如何转换它?它只是裁剪Guid的十六进制表示的前24个符号吗?

1 个答案:

答案 0 :(得分:1)

  

我该如何转换它?它只是裁剪十六进制的前24个符号   Guid的代表?

不完全是。实际上,Guid字节(由MongoDB.Bson.GuidConverter.ToBytes(guid, GuidRepresentation.CSharpLegacy)返回)转换为Base64字符串。以下是执行此类转换的C#代码:

var str = Convert.ToBase64String(MongoDB.Bson.GuidConverter.ToBytes(guid, GuidRepresentation.CSharpLegacy));

例如,对于Guid {a6f262e1-2b58-4c90-89f2-f12c4fad19b1},它会生成4WLyplgrkEyJ8vEsT60ZsQ==