2016-02-05 6 views
0

У меня проблема с запросом в MongoDB.не может найти по id в mongodb

У меня есть документ с этой структурой

{ 
    "_id" : LUUID("5eca9329-6525-e544-bb27-f1797def8110"), 
    "StartTimestamp" : NumberLong(193), 
    "EndTimestamp" : NumberLong(193), 
} 

_id является сформировать из GUID (С #). И проблема в том, когда я хочу сделать собственный запрос в консоли mongo.

Мой запрос

db.getCollection('Object').findOne(
{ 
    "_id": LUUID("5eca9329-6525-e544-bb27-f1797def8110") 
}) 

И тогда я иметь не результата

+0

В MongoDB отсутствует тип данных LUUID. Какой тип BSON использует драйвер C# для представления этого типа? Вы можете проверить это в оболочке mongodb, получив следующий лучший документ с помощью 'db.getCollection ('Object'). FindOne()'. Я подозреваю, что он либо преобразован в строку, либо объект-представление вашего класса C# LUUID. – Philipp

ответ

0

поддержка Mongo для GUID ограничена в данный момент. В настоящее время драйверы C# пишут GUID в двоичном представлении, где первые три поля GUID мало ориентированы, в то время как некоторые другие драйверы используют представление большого конца. Таким образом, в зависимости от того, какой драйвер хранит GUID, строковое представление будет другим, см. Этот билет JIRA для дальнейших подробностей,

Короче говоря, поскольку ваш GUID создан C#, он сохраняется как объект BinData с типом 3, как показано ниже.

BinData(3,"KZPKXiVlROW7J/F5fe+BEA==") 

Это означает, что для того, чтобы восстановить свою запись, вы должны выполнить следующий запрос:

db.getCollection('Object').findOne(
{ 
    "_id": BinData(3,"KZPKXiVlROW7J/F5fe+BEA==") 
}) 

В качестве альтернативы вы можете загрузить вспомогательный скрипт GitHub при запуске оболочки Монго:

mongo --shell uuidhelpers.js 

Когда загружается вы можете запросить ваш GUID, как это:

db.data.find({_id:CSUUID("5eca9329-6525-e544-bb27-f1797def8110")})