Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 传入的参数必须是一个12字节的字符串_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 传入的参数必须是一个12字节的字符串

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

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_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”})