C# 驱动程序处理 GUID

标签 c# mongodb mongodb-.net-driver

当 Id 是 guid 时,从 Mongo 查询返回时出现一些问题。我有一个非常愚蠢的测试类,它只是公共(public) Guid Id {get;set}。我创建了一个集合并插入了这个测试类。在 shell 中,我将其视为

{ "_id" : BinData(3,"9q+FwoU/RE2+Iq3w7hK1JA==") } 

然后我尝试做

var query = Query.EQ("Id", Id);

如果我查看调试器,它显示为

{ "Id" : CSUUID("c285aff6-3f85-4d44-be22-adf0ee12b524") }

但是,它没有返回任何东西。我是否遗漏了一些明显的东西?另外,请注意,shell 不知道 CSUUID 是什么。有没有办法启用它? CentOS 服务器,如果重要的话......

最佳答案

Id 将自动映射到保留的主键名称 _id。您应该将查询更改为

Query.EQ("_id", Id)

这应该可以解决您的问题。


关于 GUID 的一些背景

关于 CSUUID 的事情很值得了解,但是:它告诉您驱动程序正在使用 C# 驱动程序中 GUID 的遗留表示。我相信这仍然是默认设置,因此无需担心。有不同的编码,因为其他语言或操作系统有不同的字节顺序。

您可以扩展 shell 以“理解”不同格式的 GUID,这是一个非常有助于各种调试的扩展:

https://github.com/mongodb/mongo-csharp-driver/blob/master/uuidhelpers.js

这使得使用 shell 进行调试变得更加容易。只需下载 js 并使用 mongo --shell uuidhelpers.js 启动 mongo。

关于C# 驱动程序处理 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567067/

相关文章:

c# - 知道文件被访问 IIS

spring - 在 Spring 解决 mongodb 引用

mongodb - LabVIEW MongoDB

c#-4.0 - .NET 4 中是否有 mongodb C# 驱动程序支持 System.Dynamic.DynamicObject?

node.js - 子项的子项内的 where 子句

c# - 使用 c# 驱动程序 2.2.3 关闭 mongoDb 服务器

javascript - 如何在 ASP.NET 的 TextBox 输入中添加连字符?

c# - 使用 new 创建时命名 ValueTuple 属性

c# - 从单独的源文件 (ASP.NET/C#) 插入代码

node.js - 将参数从 Router 传递到 Meteor 上的 Template 助手