Mongoose create 正在将数组设置为“未定义”

问题描述 投票:0回答:1

我正在尝试使用 ES6 中的 Mongoose 将文档插入到 MongoDB。我有以下代码来创建文档:

    Passes.create(
        {
            passDate: '20147',
            invitedGuestPass: [{
                residentId: new mongoose.Types.ObjectId(),
                residentFirstName: 'Jack',
                residentLastName: 'Smith',
                residentEmail: '[email protected]',
                invitedGuestId: new mongoose.Types.ObjectId(),
                invitedGuestName: request.body.guestName,
                invitedGuestNumber: request.body.guestNumber,
                invitedGuestPassScanned: false,
                invitedGuestPassSent: false
            }]
        }
    )
    .then((result) => {
        console.log(result);
    })
    .catch((error) => {
        console.log(error);
    })

架构如下:

const mongoose = require("mongoose");

const invitedGuestPassesSchema = new mongoose.Schema({
    residentId: {
        type: mongoose.Schema.ObjectId,
        required: [true, "Please provide and ID..."],
        unique: false
    },
    residentFirstName: {
        type: String,
        required: [true, "Please provide the resident's first name..."],
        unique: false
    },
    residentLastName: {
        type: String,
        required: [true, "Please provide the resident's last name..."],
        unique: false
    },
    residentEmail: {
        type: String,
        required: [true, "Please provide the resident's email..."],
        unique: false
    },
    invitedGuestId: {
        type: mongoose.Schema.ObjectId,
        required: [true, "Please provide and ID..."],
        unique: false
    },
    invitedGuestName: {
        type: String,
        required: [true, "Please provide the guest's name..."],
        unique: false
    },
    invitedGuestNumber: {
        type: String,
        required: [true, "Please provide the guest's phone number..."],
        unique: false
    },
    invitedGuestPassScanned: {
        type: Boolean,
        required: [true, "Please provide if the pass has been scanned..."],
        unique: false
    },
    invitedGuestPassSent: {
        type: Boolean,
        required: [true, "Please provide if the pass has been sent..."],
        unique: false
    },
})


const passesSchema = new mongoose.Schema({
    passDate: {
        type: String,
        required: [true, "Please give date of visit..."],
        unique: true
    },
    invitedGuestPass: {
        invitedGuestPass: [invitedGuestPassesSchema],
        type: Array,
        required: [true, "Please give list of invited guests..."],
        unique: false
    },
})

module.exports = mongoose.model.Passes || mongoose.model("Passes", passesSchema);

当我运行脚本时,文档已成功创建,但“invitedGuestPass”数组被设置为未定义,而不是我传入的对象。

{
  passDate: '20147',
  invitedGuestPass: [ undefined ],
  _id: new ObjectId("65bda2eb1dd48467790b137e"),
  __v: 0
}

我正在使用“猫鼬”:“^7.6.3”,

为什么数组未定义?

我尝试将架构简化为整数数组,并传入 [1,2,3],但这给出了相同的未定义数组。

我已在 PassSchema -> InvitedGuestPass 中将“type”设置为 [invitedGuestPassesSchema],并删除“invitedGuestPass: [invitedGuestPassesSchema]”。这仍然没有定义它。 当我将其设置为字符串并传递字符串时,它成功创建了包含正确数据的文档。所以一切都是正确的。只是当我传递一个数组时它不起作用。

我检查了 js 使用 Array.isArray(...) 将输入读取为数组,并且返回 true。

我尝试过使用 insert 和 insertOne,但它给出了错误“insert 不是函数...”

node.js mongodb mongoose mongoose-schema
1个回答
0
投票

将这段代码更改为这样:

const passesSchema = new mongoose.Schema({
    passDate: {
        type: String,
        required: [true, "Please give date of visit..."],
        unique: true
    },
    invitedGuestPass: {
        type: mongoose.Schema.Types.ObjectId, ref: "Model_of_invitedGuestPassesSchema",
        //type: Array,
        required: [true, "Please give list of invited guests..."],
        //unique: false
    },
})

您正在尝试在

invitedGuestPassesSchema
内部创建一个
passesSchema
文档,而文档本身尚未创建,那么 Mongoose 如何知道尚未存储的数据呢?您必须先创建
invitedGuestPassesSchema
的文档,然后将其
_id
添加到
passesSchema
。 使用这种方法,后者将保存其他模型的文档。 我已将
unique: false
标记为注释,因为
false
是默认值,因此无需定义它,除非您希望它是
true

© www.soinside.com 2019 - 2024. All rights reserved.