Ограничение идентификатора объекта Mongoose

привет, я работаю с мангустом, и спустя долгое время я все еще не знаю, как исправить эту ошибку ... Я пытался в течение нескольких часов исправить ее, но каждый раз я просто «скрываю» проблему, заполняя поле случайным символом, но для моего проекта я не могу, мне нужен точный идентификатор, поэтому, если кто-то может помочь с примером, если он может, это будет очень приятно

Ошибка: переданный аргумент должен быть одной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов.

Я пытаюсь создать идентификатор, например: map1AssigneSeat

И для сохранения я использую этот код, где mapId равен map1AssigneSeat:

var rowData = new MapDatabase({ 
  MapDescription:  mongoose.Types.ObjectId(mapId),
  DeckNumber: Number(map.Deck[i].DeckNumber),
  x: Number(map.Deck[i].x),
  y: Number(map.Deck[i].y),
});

person Chris    schedule 03.08.2018    source источник
comment
Просто оставьте идентификатор Mongo как есть. Если вам нужен собственный идентификатор, вы можете добавить поле mapId.   -  person Estus Flask    schedule 03.08.2018
comment
но для объединения двух таблиц мне нужен objectId нет?   -  person Chris    schedule 03.08.2018
comment
Вам нужен идентификатор, не обязательно ObjectId. Если вы считаете, что это необходимо, вы можете заменить типы идентификаторов. См. stackoverflow.com/questions/21468443/< /а>   -  person Estus Flask    schedule 03.08.2018
comment
хорошо, но в основном, когда я попытаюсь присоединиться, индекс будет только по _id? Потому что мне нужно два идентификатора для коллекции в моем проекте   -  person Chris    schedule 03.08.2018


Ответы (1)


mongoose.Types.ObjectId всегда ожидает 24 символа, которые являются шестнадцатеричными символами, такими как 5b6159a1034cf06b23aa2382, что эквивалентно 12 байтам. Ошибка возникает из-за неправильной длины 24-значного шестнадцатеричного символа. Проверьте значение и длину mapId, которые вы передаете в качестве параметра. Для устранения этой ошибки он должен содержать 24 шестнадцатеричных символа.

Однако вы можете добавить некоторые фиксированные символы, например, скажем, у вас есть 20 символов mapId, затем добавить 4 символа шестнадцатеричных чисел, таких как abcd, чтобы всего было 24, и использовать это.

person Ankit Agarwal    schedule 03.08.2018
comment
И нет никакого способа обойти это ограничение? - person Chris; 03.08.2018
comment
@ Крис, к сожалению, нет. Потому что это встроенная функция библиотеки - person Ankit Agarwal; 03.08.2018
comment
@Chris, однако, вы можете добавить некоторые фиксированные символы, например, скажем, у вас есть 20 символов mapId, затем добавьте 4 символа шестнадцатеричных чисел, таких как abcd, чтобы в сумме получилось 24, и используйте это - person Ankit Agarwal; 03.08.2018
comment
@ Крис, я обновил ответ. Вы можете отметить его галочкой, чтобы он был полезен для будущих посетителей - person Ankit Agarwal; 03.08.2018