传入的参数必须是12个字节的单个字符串

ani*_*ish 11 mongoose mongodb node.js

mongoDB集合包含以下数据

db.stack.find()
{ "_id" : "8GieRu" }
Run Code Online (Sandbox Code Playgroud)

_id不是12字节的单个字符串,

根据[ObjectID] [1]的MongoDB文档,id(字符串) - 可以是24字节的十六进制字符串,12字节的二进制字符串或数字.

使用Mongoose,可以使用此Json访问此集合

{"_id" : new mongoose.Types.ObjectId("8GieRu")}
Run Code Online (Sandbox Code Playgroud)

并抛出以下错误

/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
Run Code Online (Sandbox Code Playgroud)

Mongoose严格检查固定长度的ObjectId,如何使用给定长度的mongoose传递Object_id

Mar*_*erg 13

你在这里混合了两个概念.

虽然"_id"可以有任何值(甚至子文档,如{firstName:'Foo',lastName:'Simpson'}"ObjectId"具有一组固定的类型,但有一些限制,因为错误消息正确表明.

所以你的陈述应该是

{'_id':'putWhatEverYouWantHere'}
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法只隐藏这个错误?即使设置了错误的值。还是美化它? (2认同)

mrk*_*rks 5

我在路由器订单中遇到了问题:

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);
Run Code Online (Sandbox Code Playgroud)

/jobs /:id 之后定义了/ jobs/karriere ,因此应用程序认为"karriere"是一个ObjectID并返回错误.上面的代码是工作代码.