带有 uuid 的 mongoDB C# 驱动程序中的 Find() 不起作用

问题描述 投票:0回答:2

我试图通过 uuid/guid 在 mongoDB 中查找文档,但即使将 C# uuid 转换为标准 uuid,它也不起作用。在其他属性上使用 find() 效果很好。

关于 uuid 本身的更多细节:它们是由插件插入的 Minecraft 帐户的 uuid。我正在尝试使用 C# 从 mognoDB 查询它们以创建 api。我知道存储的 uuid 是新的 uuid 格式,因为这就是它在二进制数据中返回的内容(4 是标准 uuid):image

我尝试过以下方法:

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;}
    }

在 mongoDB compass 中,用户如下所示: mongdoDB compass screenshot

c# database mongodb uuid guid
2个回答
0
投票

在 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>
...

0
投票

在应用程序启动文件中使用以下代码:

BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3; BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));

© www.soinside.com 2019 - 2024. All rights reserved.