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);
}
)};
}
);
};