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

Posted

技术标签:

【中文标题】为动态填充的对象数组生成猫鼬模式【英文标题】:Generate mongoose schema for dynamically populated array of objects 【发布时间】:2019-09-19 02:38:02 【问题描述】:

这是我的对象数组:

 [
        
            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"
            ,
        ]

所以,基本上我去掉所有我想要的属性并创建一个新的对象数组。

【问题讨论】:

【参考方案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的文档

【讨论】:

谢谢,我也试过了……出于某种奇怪的原因,data = []; 发生了。我得到空数组。你想聊聊这个吗? 您应该编辑您的问题并添加您检索数据的方式。您使用什么工具来知道您的数据库中有数据? 我使用的是 Robo 3T,之前是 Robomongo。 已编辑,请检查我的问题。 工作!谢啦!!我完全忘记了insertMany()。现在说得通了..【参考方案2】:

我会这样定义:

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

【讨论】:

以上是关于为动态填充的对象数组生成猫鼬模式的主要内容,如果未能解决你的问题,请参考以下文章

如何填充数组内的对象和猫鼬中的另一个数组中的所有用户字段

用于多个对象数组的猫鼬嵌套模式

我如何为包含数组数组的对象编写猫鼬模式?

猫鼬模式中的对象数组问题

创建包含对象数组的猫鼬模式

如何在子文档中填充模型实例数组? MongoDB猫鼬