传入的参数必须是一个12字节的单个string

mongoDB集合包含以下数据

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

_id不是单个12字节的string,

根据[ObjectID] [1]的MongoDB文档, id(string) – 可以是24字节的hexstring,12字节的二进制string或数字。

使用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,我怎样才能通过给定的长度mongoose通过Object_id

你在这里混合两个概念。

虽然“_id”可以具有任何值(甚至像{firstName:'Foo',lastName:'Simpson'}这样的子文档{firstName:'Foo',lastName:'Simpson'} ,但是“ObjectId”具有固定的一组types,但有一些限制,因为错误消息是正确的。

所以你的陈述应该是

 {'_id':'putWhatEverYouWantHere'} 

我的路由器顺序有问题

 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 /:id 之后定义了/ jobs / karriere 所以应用程序认为“karriere”是一个ObjectID并返回了错误。 上面的代码是工作的。