Подтвердить что ты не робот

Как использовать guid в запросе оболочки mongodb

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

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

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

Спасибо.

4b9b3361

Ответ 1

Вы должны сравнить значение _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. Если нет, то какой драйвер использовался для создания данных?

Ответ 2

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

.find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")})

Ответ 3

Вы можете использовать следующую функцию 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 для Legacy UUID
  • JUUID для кодирования Java
  • NUUID для кодирования .net
  • CSUUID для кодирования С#
  • PYUUID для кодирования python