【发布时间】:2020-01-24 08:58:32
【问题描述】:
我想要对象数组,即 teamMembers 应该是一个数组,并且应该将对象作为具有属性名称和角色的元素。我没有收到任何错误,当我 console.log(req.body) 时,它在我想要的格式,但是作为对象的数组元素不会发布到架构中。
_id: mongoose.Schema.Types.ObjectId,
teamName: { type: String, unique: true },
teamMembers: {
name: {
type: String, unique: true, lowercase: true, required: true
},
role: {
type: String,
enum: ['goal keeper', 'central back', 'central midfield', 'central forward', 'left wing',
'attacking midfield', 'central forward', 'left midfielder', 'striker', 'defending', 'right midfielder'],
required: true
},
type: Array
},
description: String,
createdAt: { type: Date, default: Date.now() },
updatedAt: { type: Date, default: Date.now() }
});
teamSchema.plugin(uniqueValidator); ```
I am not getting the desired result. Here is my collection from mogodb
{
"_id":{"$oid":"5d89d5da3f33f36579bfed25"},
"teamMembers":[{}],
"createdAt":{"$date":{"$numberLong":"1569314251247"}},
"updatedAt":{"$date":{"$numberLong":"1569314251247"}},
"teamName":"Arsenal",
"__v":{"$numberInt":"0"}
}
Expected result
``` "teamMembers":[{"name": "bernd leno", "role": "goal keeper"}] ```
Gotten result ``` "teamMembers":[{}] ```
Here is my below
```static async addTeam(req, res) {
const {
teamName, teamMembers, description
} = req.body;
try {
if (!req.user.isAdmin) {
return response(res, 404, 'error', {
message: messages.unAuthorizedRoute
});
}
const teams = new TeamModel({
_id: new mongoose.Types.ObjectId(),
teamName,
teamMembers,
description
});
const team = await teams.save();
if (team) {
return response(res, 201, 'success', { team });
}
} catch (error) {
(error.errors.teamName.name === 'ValidatorError')
? response(res, 409, 'error', {
message: messages.duplicateName
})
: response(res, 400, 'error', {
message: messages.error
});
}
}```
【问题讨论】:
-
teamMembers: { name, role },- 那是 not 数组,基本上我在您的代码中没有看到添加预期数组内容的有效尝试。此外,该属性上的 array 对象的架构不正确。应该改为teamMembers: [{ name: String, role: { ..all of your stuff.. } }]并且 that 是具有这两个已定义属性的对象数组的定义。 -
另外非常重要是您不希望在数组成员上设置唯一性。这实际上意味着集合的唯一索引,而不是像您想象的那样意味着数组中的唯一。 MongoDB 中的数组 uniqueness 不是由索引强制执行的。这只会导致问题,因为您很可能希望该属性出现在集合的多个文档中,即使您希望它在单个文档的数组中唯一。
-
请在您的问题上使用edit 获取更多详细信息或更正。评论不是这些的地方。
-
我贴的teamModel是正确的,因为我将type指示为Array,
teamMembers: { name: { type: String, unique: true, lowercase: true, required: true }, role: { type: String, enum: ['goal keeper', 'central back', 'central midfield', 'central forward', 'left wing', 'attacking midfield', 'central forward', 'left midfielder', 'striker', 'defending', 'right midfielder'], required: true }, type: Array //type is an array... This is scalable }经过多次console.log,我意识到name和role参数未定义 -
我现在面临的问题是如何从邮递员发布数组对象。这对我不起作用,因为 req.body.name 和 req.body.role 将是未定义的
"teamMembers": [{"name": "bernd leno", "role":"goal keeper"}]
标签: arrays node.js mongodb mongoose mongoose-schema