当 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/