Как я могу использовать вложенные схемы в mongoose, используя type для создания массивов? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать вложенную схему мангуста, которая использует тип для создания вложенного массива.

Схема, с которой, по-моему, у меня проблема, называется "chorePerson".

Вот данные, которые я пытаюсь вставить в схему:

{
  "chart": [
    {
      "ordinal": 0,
      "chorePerson": [
        {
          "person": "emily",
          "chore": "Catbox"
        },
        {
          "person": "Steve",
          "chore": "Dishes"
        }
      ]
    }
  ]

Вот моя текущая схема.Обратите внимание на использование «type» для «chart» и «chorePerson»

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const chorePersonSchema = new mongoose.Schema({
    person: {type: String, requried: true},
    chore: {type: String, required: true},
});


const chartSchema = new mongoose.Schema({
    ordinal: {type: Number, required: true},
    chorePerson:{ type: chorePersonSchema },
});


// create the schema
const ChoreChartSchema = new Schema({

    affiliation: {type: String, required: true},
    currentWeekNumber: {type: Number, required: true},
    currentYear: {type: Number, required: true},

    chart:{ type: chartSchema },

    date: {type: Date, default: Date.now},
})

module.exports = ChoreChart = mongoose.model('cm_chorechart', ChoreChartSchema)

Когда я запускаю свой код, это то, что я получаю до аварии:

{ _id: 5c742ed116a095522c38ddfc,
  affiliation: 'family',
   currentYear: 2019,
   currentWeekNumber: 9,
   date: 2019-02-25T20:26:33.914Z,
  chart: [ { ordinal: 0, chorePerson: [Array] } ] }

Я думаю... chorePerson вызывает ошибку ... но я не знаю, как ее исправить.Вот исключение:

(node:6728) UnhandledPromiseRejectionWarning: ObjectExpectedError: Tried to set nested object field `chart` to primitive value `[object Object]` and strict mode is set to throw.

Что я пробовал

Я попробовал эту схему:

const chartSchema = new mongoose.Schema({
    ordinal: {type: Number, required: true},

    chorePerson : [{
        person : String,
        chore : String
        }]       
});

Обновление:

ОК ... так что я вернулся к основам, и это работает, но я не хочу, чтобы конечная схема была такой.Кто-нибудь может помочь с вложением этого?

// create the schema
const ChoreChartSchema = new Schema({

    affiliation: {type: String, required: true},
    currentWeekNumber: {type: Number, required: true},
    currentYear: {type: Number, required: true},

//    chart:{ type: chartSchema },

    chart:[{
            ordinal: 0,
            chorePerson : [{
                person : String,
                chore : String
            }]
    }],

    date: {type: Date, default: Date.now},
})

1 Ответ

0 голосов
/ 26 февраля 2019

Оказывается, это было проще, чем я думал:

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;

    const chorePersonSchema = new mongoose.Schema({
        person: {type: String, requried: true},
        personID: {type: String, required: true},
        chore: {type: String, required: true},
        choreID: {type: String, required: true},
    });

    const chartSchema = new mongoose.Schema({
        ordinal: {type: Number, required: true},

        chorePerson : [{ type:chorePersonSchema }]       
    });


    // create the schema
    const ChoreChartSchema = new Schema({

        affiliation: {type: String, required: true},
        weekNumber: {type: Number, required: true},
        year: {type: Number, required: true},

        chart:[{type: chartSchema}],

        date: {type: Date, default: Date.now},
    })

    module.exports = ChoreChart = mongoose.model('cm_chorechart', ChoreChartSchema)
...