具有ObjectId的Mongo C#驱动程序

具有ObjectId的Mongo C#驱动程序,c#,mongodb-.net-driver,C#,Mongodb .net Driver,我在将Guid转换为BinData时遇到问题。我知道您可以只使用BsonIdAttribute映射属性,但在我的例子中,我实际上需要为我的Guid标识符使用filter子句以JSON格式编写查询 比如: mongoClient.updateName( 新的JsonFilterDefinition($“{{\”Counters.EntityId\”:{{{$eq:{myGuid.ConvertToBinData()}}}”), 新的JSONUpdate定义(“{$inc:{\”计数器。$.Coun

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

比如:

mongoClient.updateName(
新的JsonFilterDefinition($“{{\”Counters.EntityId\”:{{{$eq:{myGuid.ConvertToBinData()}}}”),
新的JSONUpdate定义(“{$inc:{\”计数器。$.Count\”:1}”);
我如何转换它?它是否只裁剪
Guid
十六进制表示形式的前24个符号

我如何转换它?它只是裁剪十六进制的前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}
它将导致
4WLYPLRKEYJ8VEST60ZSQ=

结果表明,Mongo对不同的语言版本或Mongo版本或任何其他版本使用不同的算法。有一个类
Mongo.Bson.GuidConverter
,可用于获取
Guid
的字节数组,该字节数组随后可作为参数传递给
Convert.ToBase64String
,但它对
GuidRepresentation
枚举的每个值的工作方式不同。在我的例子中,正确的方法是
GuidRepresentation.CSharpLegacy
。感谢您的更正。当然,使用现有的转换器比重新发明轮子要好:)
var str = Convert.ToBase64String(MongoDB.Bson.GuidConverter.ToBytes(guid, GuidRepresentation.CSharpLegacy));