Как использовать guid в запросе оболочки mongodb
При использовании оболочки MongoDB, как использовать тип данных guid (который я использовал как _id в своей коллекции).
Следующий формат не работает:
>db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"});
Спасибо.
Ответы
Ответ 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