Как использовать guid в запросе оболочки mongodb - PullRequest
23 голосов
/ 13 апреля 2011

Как использовать оболочку MongoDB, как использовать тип данных guid (который я использовал в качестве _id в своей коллекции).

Следующий формат не работает:

>db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"});

Спасибо.

Ответы [ 3 ]

22 голосов
/ 24 апреля 2012

Вы можете легко использовать:

.find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")})
14 голосов
/ 13 апреля 2011

Вы должны сравнить значение _id с экземпляром BinData (а не со строкой).К сожалению, конструктор BinData принимает строку Base64 вместо шестнадцатеричной строки.

В вашем значении GUID отсутствуют две шестнадцатеричные цифры в конце, поэтому для целей этого примера я буду считать, что они равны "00".Следующие значения эквивалентны:

hex: "E3E45566-AFE4-A564-7876-AEFF6745FF00" (игнорируя тире)

base64: "ZlXk4 + SvZKV4dq7 / Z0X / AA =="

Таким образом, ваш запрос должен быть:

> db.person.find ({_ id: новые BinData (3," ZlXk4 + SvZKV4dq7 / Z0X / AA ==")})

Я предполагаю, что двоичный подтип был правильно установлен на 3. Если нет, какой драйвер использовался для создания данных?

9 голосов
/ 12 августа 2016

Вы можете использовать следующую функцию js перед вашим запросом, например так:

function LUUID(uuid) {
    var hex = uuid.replace(/[{}-]/g, ""); // removes extra characters
    return new UUID(hex); //creates new UUID
}

db.person.find({"_id" : LUUID("E3E45566-AFE4-A564-7876-AEFF6745FF"});

Вы можете сохранить функцию в файле .js и загрузить или открыть ее перед выполнением запроса, и если выскопировав значение из результатов, вы должны переименовать функцию с помощью:

  • LUUID для устаревшего UUID
  • JUUID для кодировки Java
  • NUUID для кодировки .net
  • CSUUID для кодировки c #
  • PYUUID для кодировки python
...