TypeError:不能使用'in'运算符在一个中search'_id'

我正在尝试使用POST请求来检索提交的button的值,并在呈现新页面并传递值之前使用返回的值创build一个新的Mongoose模型条目。

当我尝试创build新的“types”,虽然我收到TypeError:“types错误:不能使用'在'运算符search'_id'在一个”。 有人可以帮我找出是什么驱动错误,以及如何解决它?

使用的forms:

<form action="/round/type" method="POST" class="form-inline"> <div class="row"> <div class="col"> <button class="btn btn-lg btn-primary btn-block" name="roundType" value="one" type="submit">one</button> </div> <div class="col"> <button class="btn btn-lg btn-primary btn-block" name="roundType" value="two" type="submit">two</button> </div> <div class="col"> <button class="btn btn-lg btn-primary btn-block" name="roundType" value="three" type="submit">three</button> </div> <div class="col"> <button class="btn btn-lg btn-primary btn-block" name="roundType" value="four" type="submit">four</button> </div> </div> </form> 

模型模式:

 var mongoose = require("mongoose"); //Schema Setup var TypeSchema = new mongoose.Schema({ roundType: String, }); module.exports = mongoose.model("Type", TypeSchema); 

发布要求:

 router.post("/type", function(req, res){ console.log(req.body.roundType); //this console.log prints the correct value submitted Type.create(req.body.roundType, function(err, newType){ if(err){ console.log(err); } else{ res.redirect("/round/group", {roundType: newType}); } }); }); 

错误信息:

 TypeError: Cannot use 'in' operator to search for '_id' in one at model.Document.$__buildDoc (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/document.js:222:27) at model.Document (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/document.js:67:20) at model.Model (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:55:12) at new model (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:3867:13) at /home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:2035:51 at /home/ubuntu/workspace/GolfSite_V2/node_modules/async/internal/parallel.js:27:9 at eachOfArrayLike (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/eachOf.js:57:9) at exports.default (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/eachOf.js:9:5) at _parallel (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/internal/parallel.js:26:5) at parallelLimit (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/parallel.js:85:26) at /home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:2056:5 at new Promise.ES6 (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/promise.js:45:3) at Function.create (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:2019:17) at /home/ubuntu/workspace/GolfSite_V2/routes/round.js:40:10 at Layer.handle [as handle_request] (/home/ubuntu/workspace/GolfSite_V2/node_modules/express/lib/router/layer.js:95:5) at next (/home/ubuntu/workspace/GolfSite_V2/node_modules/express/lib/router/route.js:137:13) 

Model.create需要一个文档或一组文档作为第一个参数。 目前,您只是从POST传递一个string值。

你的代码应该是这样的:

 Type.create({roundType: req.body.roundType}, function(err, newType){ // ... }) 

in运算符检查对象中是否存在属性。 例如:

 let obj = {foo: 'bar'} console.log('foo' in obj) // true 

在这种情况下,它试图在string中find属性_id – 哪个MongoDB用作文档的唯一标识符。 它不能这样做,所以抛出错误。