Аргумент, переданный в, должен быть одной строкой из 12 байтов

Коллекция mongoDB содержит следующие данные

db.stack.find()
{ "_id" : "8GieRu" }

_id не является отдельной строкой из 12 байтов,

В соответствии с документом MongoDB [ObjectID] [1], id (строка) - может быть 24-байтная шестнадцатеричная строка, 12-байтная двоичная строка или номер.

Используя Mongoose, эта коллекция доступна с использованием этого Json

{"_id" : new mongoose.Types.ObjectId("8GieRu")}

и выдает следующую ошибку

/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js:35
    throw new Error("Argument passed in must be a single String of 12 bytes or
          ^
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
    at new ObjectID (/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js:35:11)

  [1]: http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html

Mongoose строго проверяет ObjectId фиксированной длины, как я могу передать Object_id с помощью мангуста с заданной длиной

Ответ 1

Здесь вы смешиваете две концепции.

В то время как "_id" может иметь любое значение (даже поддокумент, такой как {firstName:'Foo',lastName:'Simpson'}, "ObjectId" имеет фиксированный набор типов с некоторыми ограничениями, как правильно сообщает сообщение об ошибке.

Итак, ваше утверждение должно быть

{'_id':'putWhatEverYouWantHere'}

Ответ 2

У меня была проблема в моем роутер-порядке:

app.get('/jobs', controllers.jobs.getAllJobs);
app.get('/jobs/karriere', controllers.jobs.getAllJobsXML);

app.get('/jobs/:id', controllers.jobs.getJob);
app.get('/jobs/:id/xml', controllers.jobs.getJobXML);

Я определил /jobs/karriere после/jobs/: id, поэтому приложение подумало, что "karriere" является ObjectID и возвращает ошибку. Приведенный выше код является рабочим.

Ответ 3

Убедитесь, что метод, который вы используете в клиентской и серверной части совпадают. Эта ошибка также отображается, когда вы, например, отправляете GET со стороны клиента и POST требуется на стороне сервера.

Ответ 4

та же проблема, с которой столкнулся я, но после RND. Я обнаружил, что передал неверный {Id: Undefined}, поэтому возникла проблема, поэтому сначала проверьте свой идентификатор, который вы передали в URL.

      Error = "http://localhost:4000/api/deleteBook/Undefined"
      Right = "http://localhost:4000/api/deleteBook/5bb9e79df82c0151fc0cd5c8"

Ответ 5

Вы передаете любой

ObjectID undefinded 

Если ObjectID не определен, то возникнет эта ошибка.