Драйвер C #, обрабатывающий GUID - PullRequest
4 голосов
/ 20 декабря 2011

Возникли некоторые проблемы с запросом обратно из Mongo на Id, когда это guid.У меня действительно тупой тестовый класс, это просто общедоступный Guid Id {get; set}.Я создаю коллекцию и вставляю этот тестовый класс.В оболочке я вижу это как

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

Затем я пытаюсь сделать

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

Если я смотрю в отладчике, он отображается как

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

Однако, это ничего не возвращает .. Я что-то упускаю здесь очевидное?Кроме того, обратите внимание, что оболочка понятия не имеет, что такое CSUUID. Есть ли способ включить это?Сервер CentOS, если это имеет значение ...

1 Ответ

4 голосов
/ 20 декабря 2011

Id будет автоматически сопоставлено с зарезервированным именем первичного ключа _id.Вы должны изменить свой запрос на

Query.EQ("_id", Id)

Это должно решить вашу проблему.


Некоторые сведения о GUID

Эта вещь о CSUUID полезно знать, однако: он говорит вам, что драйвер использует устаревшее представление GUID в драйвере C #.Я считаю, что это по-прежнему по умолчанию, поэтому не стоит беспокоиться.Существуют разные кодировки, потому что другие языки или операционные системы имеют разные порядки байтов.

Вы можете расширить оболочку, чтобы «понимать» разные форматы GUID, очень полезное расширение в любом случае для всехвиды отладки:

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

Это облегчает отладку с помощью оболочки.Просто скачайте js и начните монго, используя mongo --shell uuidhelpers.js.

...