anish
anish

Reputation: 7422

Argument passed in must be a single String of 12 bytes

mongoDB collection contains the following data

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

The _id is not single String of 12 bytes,

As per the MongoDB document of [ObjectID][1], id (string) – Can be a 24 byte hex string, 12 byte binary string or a Number.

Using Mongoose this collection is accessed using this Json

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

and throws the below error

/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 is strictly checking the ObjectId of fixed length, how can i pass Object_id using mongoose with the given length

Upvotes: 18

Views: 55373

Answers (6)

Vince Banzon
Vince Banzon

Reputation: 1499

In my case, I'm using mongoose. and I am not able to query with something like this:

{ "_id" : "8GieRu" }

Until I bumped into my model file and specified this line counter.model.js

var CounterSchema = new Schema({
  _id: String,
  sequence_value: Number
})

Notice that I specified the data type as string for _id in my model. and the, in my query, I didn't need to convert string to ObjectId.

Query now works as simple as what the filter:

{ "_id" : "8GieRu" }

Upvotes: 1

Sibaram Sahu
Sibaram Sahu

Reputation: 1021

You are passing any

ObjectID undefinded 

If the ObjectID is undfined thaen this error will come.

Upvotes: 1

Nagender Pratap Chauhan
Nagender Pratap Chauhan

Reputation: 2224

same problem faced by me but after a RND . I identified that i passed wrong {Id:Undefined} so problem occured so please firstly check your Id which you passed in URL.

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

Upvotes: 0

Tashfeen
Tashfeen

Reputation: 94

Make sure the method you are using in client and server side match. This error also shows when you have e.g. GET being sent from client side and POST required on the server side.

Upvotes: 2

mrks
mrks

Reputation: 5631

I had the problem in my router order:

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);

I defined /jobs/karriere after /jobs/:id so the application thought that "karriere" was an ObjectID and returned the error. The code above is the working one.

Upvotes: 9

Markus W Mahlberg
Markus W Mahlberg

Reputation: 20712

You mix two concepts here.

While "_id" can have any value (even subdocument like {firstName:'Foo',lastName:'Simpson'}, "ObjectId" has a fixed set of types with some restrictions, as the error message correctly states.

So your statement should be

{'_id':'putWhatEverYouWantHere'}

Upvotes: 17

Related Questions