为动态填充的对象数组生成猫鼬模式

时间:2019-04-30 12:18:39

标签: arrays database mongodb mongoose mongoose-schema

这是我的对象数组:

 [
        {
            ready: true,
            body: "Body 1"
        },
        {
            ready: true,
            body: "Body 3"
        },
        {
            ready: true,
            body: "Body 3"
        },
    ]

现在,如果我要生成模式,通常可以执行以下操作:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const BodySchema = new Schema({

});

mongoose.model('Body', BodySchema);

我需要知道要放在new Schema({});声明中的内容,这样它才能接受对象数组。

谢谢。

编辑:

这是我格式化数据的方式:

try {
        const retrievedFull = await getFullData();
        const data = await retrievedFull.map(({ready, body}) => ({
            ready,
            body
        }))

       const finalData = new Body(data) //instantiate Schema
       return res.status(200).json({
            success: true,
            data: finalData
        })

    } catch(err) {
        console.log(err);
    }

来自getFullData()的回复:

[
            {
                ready: true,
                body: "Body 1",
                other_stuff: "Stuff 1"
            },
            {
                ready: true,
                body: "Body 2",
                other_stuff: "Stuff 2"
            },
            {
                ready: true,
                body: "Body 3",
                other_stuff: "Stuff 3"
            },
        ]

因此,基本上,我会剥离所有想要的属性,并创建一个新的对象数组。

2 个答案:

答案 0 :(得分:1)

因此,要存储在数据库中的数据是两个简单的属性,可以使用以下模式:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const BodySchema = new Schema({
    ready: Boolean,
    body: String,
});

const BodyModel = mongoose.model('Body', BodySchema);

关于在数据库内部存储数据的方式:

try {
  // Get the data from an external source
  const externalData = await getFullData();

  // Format the data
  const formattedData = externalData.map(({
    ready,
    body,
  }) => ({
    ready,
    body,
  }));

  // Insert the data in the database
  const databaseData = await BodyModel.insertMany(formattedData);

  // Returns the inserted data
  return res.status(200).json({
    success: true,
    data: databaseData,
  });
} catch (err) {
  console.log(err);
}

insertMany

的文档

答案 1 :(得分:0)

我会这样定义它:

const BodySchema = new Schema({
    data: [{
        ready: Boolean,
        body: String
    }]
});