繁体   English   中英

将自定义对象的Mongoose PUT实施为复杂模式的问题

[英]Issue implementing a Mongoose PUT for a custom object into a complex schema

我将对问题进行分解,以确保我已经解释清楚。

我的Web应用程序正在使用MEAN.js,在这种情况下,我正在Mongoose服务器端控制器中实现更新功能。 使用此架构:

客户端角度控制器代码工作正常,并且向我发送了正确的对象以将其插入mongodb

我有一个自定义对象的数组,该对象包含数据库中其他相关的架构对象,它表示引用任务对象的更新列表,Taskstate对象的更改以及发生更新的时间。

 tupdates:[{
        task:{
          type: Schema.ObjectId,
          ref: 'Task'
        },
        tstate:{
          type: Schema.ObjectId,
            ref: 'Tstate'
        },
        startedat: Date,
        stoppedat: Date,
        updatedby:{
            type: Schema.ObjectId,
            ref: 'User'
        },
    }]

我实现了一个函数,该函数将遍历req对象中的数组,并为数组中的每个更新创建自定义对象,最后将其插入数据库中。 服务器端猫鼬控制器

var mongoose = require('mongoose'),
Job = mongoose.model('Job');
    exports.update = function(req, res){
    var job = req.job;

    //check for updates
    if(req.body.tupdates.length>0){
    for (var j=0; j<req.body.tupdates.length; j++){

        var theobj = req.body.tupdates[j];
        var tupdate = ({
           task : theobj.task._id,
            tstate: theobj.tstate._id
        });
job.tupdates.push(tupdate);
        }
    }
    job.save(function(err){
        if(err){
            return res.status(400).send({
                message: getErrorMessage(err)
            });
        }else{
            res.json(job);
        }
    });
};enter code here

数据保留在数据库中,问题是为req数组中的每个更新插入了一个我没有参考的具有ObjectID的附加_id值,如下所示:

db.jobs.find()
{ "_id" : ObjectId("56eff14d4b343c7f0a71f33c"), "creator" : ObjectId("55ddd115a2904424680263a0"), "title" : "Job1", "tupdates" : [ { "task" : ObjectId("567a9c4b90f3ccd10b0e7099"), "tstate" : ObjectId("5693bb0f804936f167fe9ec2"), *"_id" : ObjectId("56eff38e095a2fa41312d876")*} ]}

我添加了这些星号以指示_id值和ObjectId引用,该引用已添加到在服务器端控制器中创建的对象中,每次我对同一对象进行更新时,问题仍然存在。 它会在以后产生500个错误,必须省略才能使该功能在生产中正常工作,我感谢您的帮助,认为这是我需要进行的Java脚本调整。

默认情况下,如果它们是对象,猫鼬会将_id字段添加到数组元素。 只需在您的架构中添加_id: false即可:

    tupdates:[{
        _id: false,
        task:{
          type: Schema.ObjectId,
          ref: 'Task'
        },
        tstate:{
          type: Schema.ObjectId,
            ref: 'Tstate'
        },
        startedat: Date,
        stoppedat: Date,
        updatedby:{
            type: Schema.ObjectId,
            ref: 'User'
        },
    }]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM