Node.js 传入的参数必须是一个12字节的字符串
mongoDB集合包含以下数据Node.js 传入的参数必须是一个12字节的字符串,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,mongoDB集合包含以下数据 db.stack.find() { "_id" : "8GieRu" } _id不是12字节的单个字符串 根据[ObjectID][1]的MongoDB文档,id(字符串)–可以是24字节的十六进制字符串、12字节的二进制字符串或数字。 使用Mongoose可使用此Json访问此集合 {"_id" : new mongoose.Types.ObjectId("8GieRu")} 并抛出下面的错误 /node_modules/mongoose/node_modu
db.stack.find()
{ "_id" : "8GieRu" }
_id不是12字节的单个字符串
根据[ObjectID][1]的MongoDB文档,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,如何使用给定长度的Mongoose传递Object\u id 虽然“_id”可以有任何值(即使是像
{firstName:'Foo',lastName:'Simpson'}
,但正如错误消息正确指出的那样,“ObjectId”有一组固定的类型,并带有一些限制
所以你的陈述应该是
{'_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并返回了错误。上面的代码是有效的。确保在客户端和服务器端使用的方法匹配。此错误还显示何时从客户端发送,例如从服务器端发送
GET
,以及在服务器端需要POST
。我面临的问题相同,但在RND之后。我确定了我传递了错误的{Id:Undefined},所以出现了问题,所以请首先检查您在URL中传递的Id
Error = "http://localhost:4000/api/deleteBook/Undefined"
Right = "http://localhost:4000/api/deleteBook/5bb9e79df82c0151fc0cd5c8"
你通过了任何考试
ObjectID undefinded
如果ObjectID未定义,则会出现此错误。在我的情况下,我使用的是mongoose。我无法使用以下内容进行查询:
{ "_id" : "8GieRu" }
直到我碰到我的模型文件并指定了这一行counter.model.js
var CounterSchema = new Schema({
_id: String,
sequence_value: Number
})
注意,我在模型中将数据类型指定为_id的字符串。
在我的查询中,我不需要将字符串转换为ObjectId
查询现在的工作方式与过滤器的工作方式一样简单:
{ "_id" : "8GieRu" }
文档中的一些有趣的页面:是否存在只隐藏此错误的方法?即使设置了错误的值。或者为了美化它?注意:ObjectId是12字节,但您可以使用长度超过24字节的字符串id,而不是十六进制格式,它可以轻松地使用mongo shell db.users.insert进行测试({u id:'0123454678ببببی901234567800000000000000000000000000000000000005'),我甚至在_id中使用了阿拉伯字符,它的OKYU应该传递ObjectID而不是ObjectID,注意最后的“D”这是大写的,您是如何为
/jobs/:id
修复它的?这正是我现在遇到的问题。我在/jobs/:id
路由中这样做的:如果(!ObjectId.isValid(id))返回res.json({error:“Invalid Campaign id”})