C#驱动程序处理GUID

时间:2011-12-19 20:23:42

标签: c# mongodb mongodb-.net-driver

当它是一个guid时,有一些问题从Mongo查询Id。我有一个非常愚蠢的测试类,它只是公共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服务器如果重要......

1 个答案:

答案 0 :(得分:4)

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。