Mongoose 中的子文档数组

Posted

技术标签:

【中文标题】Mongoose 中的子文档数组【英文标题】:Array of subdocuments in Mongoose 【发布时间】:2017-09-17 23:15:59 【问题描述】:

我有两个架构。

FAQ Schema 

const EventFAQSchema = mongoose.Schema(
    question:  type: String, req: true ,
    answer:  type: String, req: true 
);

EventSchema 

const EventSchema = mongoose.Schema(
   "title":  type: String ,
   "description":  type: String ,
   "eventFAQs": [
       type: EventFAQSchema ,
       default: EventFAQSchema 
    ]
)

我正在尝试嵌入一个常见问题类型的对象数组。但我收到以下错误

Undefined type 'undefined' at array 'eventFAQs'

我知道我缺少对象数组的基本概念。但是我花了很多时间试图找出原因,但自己无法解决。

【问题讨论】:

在代码中输入错误是正确的... 【参考方案1】:

尝试:

"eventFAQs": 
    type: [ EventFAQSchema ],
    default: [
        question: "default question",
        answer: "default answer"
    ]

编辑

model.js

const mongoose = require('mongoose');

const EventFAQSchema = mongoose.Schema(
    question:  type: String, required: true ,
    answer:  type: String, required: true 
);

const EventSchema = mongoose.Schema(
    "title":  type: String ,
    "description":  type: String ,
    "eventFAQs": 
        type: [ EventFAQSchema ],
        default: [
            question: 'Question',
            answer: 'Answer'
        ]
    
);

module.exports = mongoose.model('Event', EventSchema);

用法:

const Event = require('./model.js');

var e = new Event(
    title: "Title"
);

e.save(function (err) 
    console.log(err); // NO ERROR
);

结果:

 
    "_id" : ObjectId("58f99d1a193d534e28bfc70f"), 
    "title" : "Title", 
    "eventFAQs" : [
        
            "question" : "Question", 
            "answer" : "Answer", 
            "_id" : ObjectId("58f99d1a193d534e28bfc70e")
        
    ], 
    "__v" : NumberInt(0)

【讨论】:

这给了我一个嵌入式文档,我需要一个嵌入式文档数组 当我遍历 req 并创建一个 EventFAQ 数组并在创建事件文档时将其放入时,只有默认的“问题”和“答案”被采用。 这也可以:var faqs = [ question: 'question1', answer: 'answer1' , question: 'question2', answer: 'answer2' , question: 'question3', answer: 'answer3' ];var e = new Event( title: "Title", eventFAQs: faqs );

以上是关于Mongoose 中的子文档数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoose 更新数组中的子文档

Node.js/mongoose - 数组中的子文档不会删除/移除

Node.js/mongoose - 数组中的子文档不会删除/移除

将新对象插入到 mongoose 中的子文档数组字段中

将新对象插入到 mongoose 中的子文档数组字段中

将 select: false 设置为 mongoose 的子文档数组