【问题标题】:Saving Array of Obj in Mongoose在 Mongoose 中保存 Obj 数组
【发布时间】:2018-04-17 12:18:49
【问题描述】:

我有一个可以 POST 的 Express 端点,如下所示:

router.post("/add", (req, res) => {
  Poll.create({
    question: req.body.question,
    options: req.body.options,
  }).then(p => {
    res.send(p);
  });
});

这就是我要发布的内容:

{
    "question": "what is your favourite colour?",
    "options" : 
    [
    {
        "colour" : "green",
        "votes" : 5
    },
    {
        "colour": "red",
        "votes": 50
    }
    ]
}

我收到的回复是:

{
    "__v": 0,
    "question": "what is your favourite colour?",
    "_id": "59fe97088687d4f91c2cb647",
    "options": [
        {
            "votes": 5,
            "_id": "59fe97088687d4f91c2cb649"
        },
        {
            "votes": 50,
            "_id": "59fe97088687d4f91c2cb648"
        }
    ]
}

由于某种原因,“颜色”键没有被捕获。我通过在 Mongo 中查看该系列确认了这一点,确实只捕获了“投票”而没有颜色。

为了以防万一,这里是模型架构:

const PollSchema = new Schema({
  question: {
    type: String,
  },
  options: [
    {
      option: {
        type: String,
      },
      votes: Number,
    },
  ],
});

【问题讨论】:

  • 几乎不是“未知原因”。您根本没有在架构中定义"color"。所以它正在被删除。你改为"option"

标签: node.js mongodb rest express mongoose


【解决方案1】:

这是因为您没有在架构中添加“颜色”。所以猫鼬?将忽略“颜色”,因此它不会出现在您的数据库中。

【讨论】:

    【解决方案2】:

    如果您需要保存架构中未计划的属性,可以添加
    { strict: false } 选项。这样,属性将被保存。

    const PollSchema = new Schema({
      // ... your schema
    }, { strict: false });
    

    但如果您知道该属性将始终相同,最好将其添加到您的架构定义中。

    const PollSchema = new Schema({
      question: String,
      options: [
        {
          colour: String,
          votes: Number
        }
      ]
    });
    

    【讨论】:

    • 就是这样,我的option: String 是动态的,具体取决于投票选项,添加strict:false 让我保存。干杯!
    猜你喜欢
    • 2017-12-30
    • 2016-06-01
    • 2017-03-11
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多