html - 类型错误 : Cannot use 'in' operator to search for '_id' in one

标签 html node.js mongodb post mongoose-schema

我正在尝试使用 POST 请求来检索提交的按钮的值,并在渲染新页面并传递该值之前使用返回的值创建一个新的 Mongoose 模型条目。

当我尝试创建新的“类型”时,尽管我收到了类型错误: “类型错误:无法使用‘in’运算符在其中搜索‘_id’”。有人可以帮我找出导致错误的原因以及如何修复它吗?

使用的表格:

       <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 传递一个字符串值。

您的代码应类似于:

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

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

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

在本例中,它尝试在字符串 one 内查找属性 _id(MongoDB 将其用作文档的唯一标识符)。它无法执行此操作,因此会抛出错误。

关于html - 类型错误 : Cannot use 'in' operator to search for '_id' in one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621783/

相关文章:

node.js - Sequelize JS/Bluebird : Starting with async parallel DB calls

node.js - nodejs - 在 for 循环结束后返回 Promise

javascript - JS - 删除段落中的所有图像和格式

javascript - Bootstrap 3 旋转木马和导航栏不工作

javascript - 使用 jQuery 生成 DIV 网格,但如果它不是 10 x 10,则会出现奇怪的行为

javascript - 如何并行运行多个 npm 脚本?

php - 无法从数据库 php 获取图像

mongodb - "populate"具有 $lookup 的字段而不覆盖现有值

windows - Mongo shell "this app can' t 在您的电脑上运行,要找到适合您电脑的版本,请与软件发行商联系。”

mysql - MongoDB - 正确使用集合?