【问题标题】:What field type we can use in mongo to store an array of objects?我们可以在 mongodb 中使用什么字段类型来存储对象数组?
【发布时间】:2020-01-31 12:38:15
【问题描述】:

我们可以在 mongo 中使用什么字段类型来存储对象数组?我想将数据存储在下面。我在下面有我的实现,我已经添加了代码,也许你可以以某种方式检查它,让我知道我遇到问题或错误的部分在哪里。我还提供了样本数据。当前实现的问题是它不保存数据库中的书籍数组为 0 个元素的数据

样本数据

{
    "books":
              [
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C. Zakas"
                    ],
                    "edition": 3,
                    "year": 2011
                },
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C.Zakas"
                    ],
                    "edition": 2,
                    "year": 2009
                }
               
              ]
}

#implementation


const schema = new Schema({
    books: [{ type: mongoose.Schema.Types.Mixed }]

  })


var RouterData = mongoose.model('RouterData', schema);

var routerData = {
    "books":
              [
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C. Zakas"
                    ],
                    "edition": 3,
                    "year": 2011
                },
                {
                    "title": "Professional JavaScript",
                    "authors": [
                        "Nicholas C.Zakas"
                    ],
                    "edition": 2,
                    "year": 2009
                }

              ]
}

var data = new RouterData({routerData: routerData});
data.save();

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    我认为您可以这样定义架构。

    const booksSchema = new Schema({
      books: [{
        title: String,
        authors: [String],
        edition: Number,
        year: { type: Date }
      }]
    })

    【讨论】:

    • 我已经更新了我的问题,我在上面提供了我的示例代码,谢谢
    • 我认为你应该代替这条线var data = new RouterData({routerData: routerData});,你应该这样做:var data = new RouterData({...routerData});
    • 您正在设置密钥routerData,它不属于您的架构。您需要提供与架构中相同的数据格式。
    【解决方案2】:

    像这样在猫鼬中定义你的架构:

    const BookSchema = new mongoose.Schema({
        title: String,
        authors: [String],
        edition: Number,
        year: Number,
    }, {
        _id: false,
    });
    
    const MySchema = new mongoose.Schema({
        books: [BookSchema],
    });
    

    【讨论】:

    • 我已经更新了我的问题,我在上面提供了我的示例代码,谢谢
    【解决方案3】:

    如果你使用猫鼬,那么你应该在你的架构中做

    books: [{ type: mongoose.Schema.Types.Mixed }]
    

    混合意味着它可以接受任何对象、数组等。你可以查看https://mongoosejs.com/docs/schematypes.html#mixed

    【讨论】:

    • 我已经更新了我的问题,我在上面提供了我的示例代码,谢谢
    • 你查看链接了吗?现在要保存在您的服务中,使用 push 方法将数据添加到您的书籍中,因为它在您保存之前是一个数组。例如 books.push(data) 然后 books.save() data 是 req.body 或你的有效载荷
    【解决方案4】:

    这应该可行:

    const mongoose = require('mongoose');
    
    const BookSchema = new mongoose.Schema({
      title: { type: String },
      authors: [String],
      edition: { type: Number },
      year: { type: Number },
    });
    
    const MySchema = new mongoose.Schema({
      books: [BookSchema],
    });
    
    module.exports = mongoose.model('MySchema', MySchema);
    

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多