【问题标题】:How to insert Array of objects in mongoDB?如何在 mongoDB 中插入对象数组?
【发布时间】:2021-10-25 20:37:20
【问题描述】:

我是 MONGO DB 的新手,所以请多多包涵。我遇到了一个问题,我的对象数组无法正常工作。

这是我的架构

const playerSchema = new mongoose.Schema({
    name: String,
    stats :{
        wins:Number,
        losses:Number,
        xp:Number
    },
    achievement:[
        {
        name:String,  
        date: String
            
        } 
    ]        });

这是我的文件

const fluffy = new playerModel({
    "name":"nic raboy",
    "stats":{
        "wins":5,
        "losses":10,
        "xp":300
    },
    "achievements":[
        {"name":"Massive XP","date" :"25-08-21"},
        {"name":"instant loss","date":"24-08-21"}       
    ]

});

但是在 mongodb atlas 中它只显示数组...而且我看不到里面的对象... SCREENSHOT

【问题讨论】:

  • 这能回答你的问题吗? Insert array of objects into MongoDB
  • 欢迎来到 StackOverflow。请务必在发布前进行搜索。过去可能有人已经遇到过相同或类似的问题:)

标签: node.js mongodb mongoose


【解决方案1】:

你的架构是正确的,看来你的输入是错误的,

在架构定义中,您将其命名为 achievement,而在输入文档中则命名为 achievements。更正这一点,一切都会按您的预期工作。

说明

架构需要成就,而您插入了成就,这就是它在数据库中显示为空数组的原因。为避免将来出现此类拼写错误,请使用 required 标志。

const playerSchema = new mongoose.Schema({
    name: String,
    stats: {
        wins: Number,
        losses: Number,
        xp: Number
    },
    achievements: [
        {
            name: {
                type: String,
                required : true,
            },
            date: {
                type: String,
                required : true, // required informs for missing fields
            }
        }
    ]
})

有关验证的更多信息,请参阅link

【讨论】:

    【解决方案2】:

    您可以使用insertMany 参见文档here
    当然,while 循环应该可以调用 find 多次 insertOne,但我建议您使用 insertMany() 方法。

    如果您是 MongoDB 新手,我强烈建议您查看 MongoDB 大学的 MongoDB basics course 以及 MongoDB for JavaScript Developers 课程。

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 2021-07-21
      • 2016-08-21
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多