web-dev-qa-db-fra.com

L'argument transmis doit être une chaîne unique de 12 octets.

la collection mongoDB contient les données suivantes

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

Le _id n'est pas une chaîne unique de 12 octets,

Selon le document MongoDB de [ObjectID] [1], id (chaîne) - Peut être une chaîne hexagonale de 24 octets, une chaîne binaire de 12 octets ou un nombre.

En utilisant Mongoose cette collection est accédée en utilisant ce Json

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

et jette l'erreur ci-dessous

/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 vérifie strictement l'ObjectId de longueur fixe, comment puis-je passer Object_id en utilisant mangouste avec la longueur donnée

8
anish

Vous mélangez deux concepts ici.

Bien que "_id" puisse avoir n'importe quelle valeur (même un sous-document tel que {firstName:'Foo',lastName:'Simpson'}, "ObjectId" a un ensemble fixe de types avec certaines restrictions, comme l'indique correctement le message d'erreur.

Donc, votre déclaration devrait être

{'_id':'putWhatEverYouWantHere'}
11
Markus W Mahlberg

J'ai eu le problème dans ma commande de routeur:

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

J'ai défini/jobs/karriere after / jobs /: id si l'application a pensé que "karriere" était un ObjectID et a renvoyé l'erreur. Le code ci-dessus est celui qui fonctionne.

5
mrks

Assurez-vous que la méthode que vous utilisez dans les correspondances côté client et côté serveur. Cette erreur indique également lorsque vous avez par exemple GET étant envoyé du côté client et POST requis du côté serveur.

1
Tashfeen

même problème rencontré par moi mais après un RND. J'ai identifié que j'avais mal passé {Id: Undefined}, donc un problème est survenu, veuillez donc d'abord vérifier votre identifiant que vous avez transmis dans une URL. 

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