无法填充嵌套数组
Posted
技术标签:
【中文标题】无法填充嵌套数组【英文标题】:Unable to populate nested array 【发布时间】: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 感谢您的关注。程序只是用户模式的一个道具。表单被大量写入,所以我将它们移到了他们自己的集合中,而程序实际上只写入了几次,然后将引用添加到另一个表单。 【参考方案1】:在考虑了更多@dprogramz 评论后,我决定将程序移至他们自己的收藏中。此查询现在有效:
Proceeding.find( userId: id )
.populate(
path: 'forms',
model: 'Forms'
)
.exec((err, proceedings) =>
if (err)
logger.error(err.message);
return res.send( error: err.message );
if (!proceedings)
return res.send( error: 'No such proceedings' );
return res.send( ok: proceedings, proceedingId: proceedings[proceedings.length - 1]._id );
);
【讨论】:
以上是关于无法填充嵌套数组的主要内容,如果未能解决你的问题,请参考以下文章