【发布时间】:2018-07-05 05:58:21
【问题描述】:
我对 MongoDB 和 Mongoose 还很陌生,我正在尝试填充嵌套数组,但没有任何运气。
用户有一个名为“proceedings”的道具,它是一个对象数组。该数组中的每个元素都包含一些道具,包括称为“表单”的数组。
proceedings[i].forms 保存表单集合中所有表单的引用以进行诉讼。
除了“表格”之外,“程序”中没有可填充的内容。 我正在尝试为每个进程填充嵌套的“表单”数组。
所以:
User: {
_id: ObjectId,
proceedings: [
{
_id: ObjectId,
forms: [
ObjectId,
ObjectId,
ObjectId
]
},
{
_id: ObjectId,
forms: [
ObjectId,
ObjectId,
ObjectId
]
}
]
}
架构:
const formSchema = new Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
values: { type: mongoose.Schema.Types.Mixed }
}, { timestamps: true });
const proceedingsSchema = new Schema({
initial_questions: {},
forms: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Form'
}
]
});
const userSchema = new Schema({
email: {
type: String,
default: '',
unique: true
},
password: {
type: String,
default: ''
},
sign_up_date: {
type: Object,
default: moment(),
get: parseDate
},
proceedings: [proceedingsSchema]
}, { timestamps: true });
userSchema.set('toObject', { getters: true });
userSchema.set('toJSON', { getters: true });
export const User = mongoose.model('Users', userSchema);
export const Form = mongoose.model('Forms', formSchema);
查询:
User.findOne({ _id: id })
.populate({
path: 'proceedings',
populate: {
path: 'forms',
model: 'Form'
}
})
.exec((err, user) => {
console.log(user.proceedings[0].forms)
})
结果是一个 ObjectId 的数组,而不是填充的表单。
非常感谢任何帮助。
猫鼬 - v5.0.1
【问题讨论】:
-
你永远不会定义你的进程模式模型
-
@dprogramz 感谢您的关注。程序只是用户模式的一个道具。表单被大量写入,所以我将它们移到了他们自己的集合中,而程序实际上只写入了几次,然后将引用添加到另一个表单。
标签: arrays node.js mongodb mongoose mongoose-populate