【问题标题】:A nested array schema with object element returns an array with empty object具有对象元素的嵌套数组模式返回具有空对象的数组
【发布时间】: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


【解决方案1】:

我的代码是正确的,我没有从邮递员正确发布对象数组。Right way to post an array of objects in postman using urlencoded

它也适用于原始 json/urlencoded

{
    "teamName": "Arsenal",
    "teamMembers": [{"name": "bernd leno", "role":"goal keeper"}, {"name": "Emiliano Martinez", "role":"goal keeper"}]
}

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多