Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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
Javascript 插入新的子文档后,如何以数组形式查找子文档?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 插入新的子文档后,如何以数组形式查找子文档?

Javascript 插入新的子文档后,如何以数组形式查找子文档?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我已经搜索了类似的案例,但在下面的代码片段中找不到问题所在 我的模式如下: var mongoose = require('mongoose'); var teamMemberModelSchema = new mongoose.Schema({ "email": { "type": String, "required": true, "min": 5, "max": 20 }, "name": {

我已经搜索了类似的案例,但在下面的代码片段中找不到问题所在

我的模式如下:

var mongoose = require('mongoose');

var teamMemberModelSchema = new mongoose.Schema({
    "email": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 20
    },
    "name": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 20
    },
    "role": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
    "twitter": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
    "facebook": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
    "linkedin": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
});

var teamModelSchema = new mongoose.Schema({
    "title": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 20
    },
    "headline": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 30
    },
    "description": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 80
    },
    "members": [teamMemberModelSchema]
}, { collection: 'team' });

teamModelSchema.set('collection', 'team');
mongoose.model('team', teamModelSchema);
mongoose.model('member', teamMemberModelSchema);
问题在于尝试向teamModelSchema内的members数组添加新项

它返回“TypeError:无法读取未定义的属性“push”

我试过几种不同的方法,但都没有达到预期的效果

在这种情况下,如何向成员添加新项目

PS:sendJsonResponse只是一个不执行res status和json对象的函数

  • find()
    返回文档数组
  • teamInfo
    变量为数组
  • 数组编号包含
    成员
    属性

  • 使用
    findOne
    获取特定文档或按索引从数组中选择特定文档(例如
    teamInfo[0].members.push
    )。

    @Lemix。在了解了您的帮助并尝试了一段时间后,有效的解决方案如下:

    module.exports.addTeamMember = function (req, res) {
    
        TeamModel.find( TeamModel ).exec(
            function (err, teamInfo) {
                if (err) {
                    responseUtilities.sendJsonResponse(res, err, teamInfo);
                } else {
    
                    teamInfo[0].members.push({
                        email: req.body.email,
                        name: req.body.name,
                        role: req.body.role,
                        twitter: req.body.twitter,
                        facebook: req.body.facebook,
                        linkedin: req.body.linkedin
                    });
    
                    var membersLength = teamInfo[0].members.length - 1;
                    var thisMember;
                    thisMember = teamInfo[0].members[membersLength];
    
                    var doc  = { id: teamInfo[0].description.id };
                    var options = { $set: { id: teamInfo[0].id,
                                            description: teamInfo[0].description,
                                            headline: teamInfo[0].headline,
                                            title: teamInfo[0].title,
                                            members: teamInfo[0].members,
                                            }};
    
                     TeamModel.updateOne(doc, options,function (err, teamInfo) {
                        if (err) {
                            data = teamInfo;
                        }
                        else {
                            data = thisMember;
                        }
                        responseUtilities.sendJsonResponse(res, err, data);
                     }
                    )};
                }
            );
    };
    

    你能分享收集的数据吗你好,看看我找到的解决方案。成功了。你怎么认为?有没有办法使它更简单?
    module.exports.addTeamMember = function (req, res) {
    
        TeamModel.find( TeamModel ).exec(
            function (err, teamInfo) {
                if (err) {
                    responseUtilities.sendJsonResponse(res, err, teamInfo);
                } else {
    
                    teamInfo[0].members.push({
                        email: req.body.email,
                        name: req.body.name,
                        role: req.body.role,
                        twitter: req.body.twitter,
                        facebook: req.body.facebook,
                        linkedin: req.body.linkedin
                    });
    
                    var membersLength = teamInfo[0].members.length - 1;
                    var thisMember;
                    thisMember = teamInfo[0].members[membersLength];
    
                    var doc  = { id: teamInfo[0].description.id };
                    var options = { $set: { id: teamInfo[0].id,
                                            description: teamInfo[0].description,
                                            headline: teamInfo[0].headline,
                                            title: teamInfo[0].title,
                                            members: teamInfo[0].members,
                                            }};
    
                     TeamModel.updateOne(doc, options,function (err, teamInfo) {
                        if (err) {
                            data = teamInfo;
                        }
                        else {
                            data = thisMember;
                        }
                        responseUtilities.sendJsonResponse(res, err, data);
                     }
                    )};
                }
            );
    };