【问题标题】:MongoDB schema does not insert property when using with insertOne function与 insertOne 函数一起使用时,MongoDB 模式不插入属性
【发布时间】:2020-02-06 01:03:55
【问题描述】:

一开始的问题已经解决了,谢谢!

现在,每当我插入文档时,它都会像这样:

{

_id: "5e3b64b6655fc51454548421",
todos: [ ],
title: "title"

}

它应该看起来像这样,因为在架构中,“title”属性位于“todos”属性之上。

{

_id: "5e3b64b6655fc51454548421",
title: "title",
todos: [ ]

}

JavaScript

//project schema
const schema = mongoose.Schema({
    title: String,
    todos: []
});

const Project = mongoose.model('Project', schema);

//add a project
app.post('/addProject', (req, res) => {
    const collection = db.collection('projects')
    const proj = new Project({title: req.body.title});
    collection.insertOne(proj, function(err, results) {
        if (err){
            console.log(err);
            res.send('');
            return
        }
        res.send(results.ops[0]) //retruns the new document
    })
})

【问题讨论】:

    标签: javascript node.js json mongodb express


    【解决方案1】:

    您正在以下行中重命名您的密钥:

    const proj = new Project({title: req.body.projTitle});
    

    您的架构需要projTitle,请尝试将其更改为:

    const proj = new Project({projTitle: req.body.projTitle});
    

    Mongoose schema 定义文档的结构。每当您尝试保存架构中未定义的其他字段时,mongoose 都会简单地忽略它。

    【讨论】:

    • 谢谢你的回答,这就是问题所在。还有一件事,现在每当我在数据库中插入一个时,todos 数组就会放在 JSON 对象中的 title 属性之上。
    • @VladTanasie 在 MongoDB 中依赖键的顺序不是一个好主意:stackoverflow.com/questions/5046835/…
    【解决方案2】:

    您在创建新项目对象时输入了错误的密钥。根据您的架构将其更改为正确的密钥,您就可以开始使用了。

    //project schema
    const schema = mongoose.Schema({
        projTitle: String,
        todos: []
    });
    
    const Project = mongoose.model('Project', schema);
    
    //add a project
    app.post('/addProject', (req, res) => {
        const collection = db.collection('projects')
        **const proj = new Project({projTitle: req.body.projTitle});** // changes are here
        collection.insertOne(proj, function(err, results) {
            if (err){
                console.log(err);
                res.send('');
                return
            }
            res.send(results.ops[0]) //retruns the new document
        })
    })
    

    【讨论】:

      【解决方案3】:

      请尝试查看下面的代码。

      const collection = db.collection('projects')
      const proj = new Project({projTitle: req.body.projTitle}); //make changes here
      

      【讨论】:

        猜你喜欢
        • 2018-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多