我正在尝试使用 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 不是函数...”
将这段代码更改为这样:
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
。