我试图通过 uuid/guid 在 mongoDB 中查找文档,但即使将 C# uuid 转换为标准 uuid,它也不起作用。在其他属性上使用 find() 效果很好。
关于 uuid 本身的更多细节:它们是由插件插入的 Minecraft 帐户的 uuid。我正在尝试使用 C# 从 mognoDB 查询它们以创建 api。我知道存储的 uuid 是新的 uuid 格式,因为这就是它在二进制数据中返回的内容(4 是标准 uuid):
我尝试过以下方法:
public async Task<User> Get(Guid uuid) {
BsonBinaryData binUuid = new BsonBinaryData(uuid, GuidRepresentation.Standard);
return await users.Find(Builders<User>.Filter.Eq("_id", binUuid)).FirstOrDefaultAsync<User>();
}
我的用户模型如下所示:
public class User {
public Guid Id {get; set;}
public string? data {get; set;}
public string? lastKnownName {get; set;}
public SkinBlob? lastKnownSkin {get; set;}
public DateTime? lastOnline {get; set;}
public DateTime? firstJoin {get; set;}
public string? maskRank {get; set;}
public string? maskName {get; set;}
public SkinBlob? maskSkin {get; set;}
public string? disguise {get; set;}
public PermissionInfo? permissionInfo {get; set;}
}
在 C# Mongodb 驱动程序中只能使用 BsonValue。
您可以在这里找到 BsonValue 类型的列表 https://github.com/mongodb/mongo-csharp-driver/tree/master/src/MongoDB.Bson/ObjectModel
我的建议是使用字符串而不是 Guid。 如果你真的想使用 Guid,那么从另一个 BsonValue 类型中汲取灵感,编写 BsonGuid 类,例如 BsonString
public class BsonString : BsonValue, IComparable<BsonString>, IEquatable<BsonString>
...
在应用程序启动文件中使用以下代码:
BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3; BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));