【问题标题】:How do I prevent mongoose from creating id's when I create a schema with a place for a reference to another mongoose object?当我创建一个带有引用另一个 mongoose 对象的位置的模式时,如何防止 mongoose 创建 id?
【发布时间】:2017-06-17 03:54:18
【问题描述】:

这不是重复的,因为我“重复”的问题是关于从 subchemas 中删除 id。在这里,我想防止 mongoose 用 不引用任何内容的 id 填充我日历中的时间。它只是应该用课程ID来存储课程。

我正在尝试制作一个包含周、日和小时的日历,其中每个小时都应该能够参考一堂课。

这是我的日历模式:

var mongoose = require("mongoose");

var calendarSchema = new mongoose.Schema({
    owner: {type: mongoose.Schema.Types.ObjectId, ref: "User"},
    weeks: [{
        number: Number,
        days: [{
            number: Number,
            hours: [{
                number: Number,
                available: { type: Boolean, default: false },
                booked: { type: Boolean, required: true, default: false },
                lesson: {type: mongoose.Schema.Types.ObjectId, ref: "Lesson"}
            }]
        }]
    }]
});

module.exports = mongoose.model("Calendar", calendarSchema);

当每个用户使用此功能注册时,我会为他们创建一个新日历

generateCalendar = function() {
    var calendar = {};
    var date = new Date(2017,0,2);

    calendar.weeks = [];
    for (var w = 0; w < 52; w++) {
        calendar.weeks[w] = {};
        calendar.weeks[w].number = w+1; 
        calendar.weeks[w].days = [];
        for (var d = 0; d < 7; d++) {
            calendar.weeks[w].days[d] = {};
            calendar.weeks[w].days[d].date = new Date(date.setDate(date.getDate()+1))
            calendar.weeks[w].days[d].hours = [];
            calendar.weeks[w].days[d].number = d+1; 
            for (var h = 0; h < 24; h++) {
                calendar.weeks[w].days[d].hours[h] = {};
                calendar.weeks[w].days[d].hours[h].number = h+1;
            }
        }
    }
    return calendar;
}

作为创建日历时的输入

Calendar.create(generateCalendar(), function(err, calendar) {
                if (err) {
                    console.log(err);
                } else {
                    user.calendar = calendar;
                    user.save();
                    calendar.owner = user;
                    calendar.save();
                    res.redirect('/dashboard');
                }
            });

问题是用户日历中的每个小时现在都包含一个猫鼬对象 ID,即使我没有分配任何课程。

这是一个典型的小时的样子:

{ available: true,
  booked: false,
  _id: 5890b0f1abe4da6e879e2e38,
  number: 13 }

我不知道为什么一小时内有一个 id,或者它引用了什么!如果我在第 13 小时添加一个课程,它就会变成

{ available: false,
  booked: true,
  lesson: 5890b1dfabe4da6e879e520a,
  _id: 5890b0f1abe4da6e879e2e38,
  number: 13 }

【问题讨论】:

  • @chridam,我在另一个答案中看到了您的评论,并且效果很好。谢谢!

标签: node.js mongodb express mongoose


【解决方案1】:

因此,对于遇到相同问题的任何人,我将小时字段更改为

hours: [{
                number: Number,
                available: { type: Boolean, default: false },
                booked: { type: Boolean, required: true, default: false },
                _id: false,
                lesson: {type: mongoose.Schema.Types.ObjectId, ref: "Lesson"}
            }]

就是这样。不知道为什么猫鼬开始每小时创建 ID。

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 2014-04-10
    • 2018-02-28
    • 2019-02-06
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多