【问题标题】:Find() in mongoDB C# driver with uuids doesn't work带有 uuids 的 mongoDB C# 驱动程序中的 Find() 不起作用
【发布时间】:2022-11-28 19:17:26
【问题描述】:

我试图通过 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


    【解决方案1】:

    在 C# Mongodb 驱动程序中,您只能使用 BsonValue。

    您可以在此处找到 BsonValue 类型的列表 https://github.com/mongodb/mongo-csharp-driver/tree/master/src/MongoDB.Bson/ObjectModel

    我的建议是使用字符串而不是 Guid。 如果你真的想使用 Guid 然后编写 BsonGuid 类,从另一个 BsonValue 类型中汲取灵感,例如 BsonString

    public class BsonString : BsonValue, IComparable<BsonString>, IEquatable<BsonString>
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2018-06-23
      相关资源
      最近更新 更多