我使用的是express + mongoose,一般来说,populate方法工作得很好。然而,有一种情况,它不起作用。它也不会显示任何错误:
我有一个任务模型,它有一些模块:
import { Model, Schema, model } from 'mongoose';
import { IAssignment } from '../interfaces/app/IAssignment';
// Define Mongoose schema for Assignment
const AssignmentSchema = new Schema<IAssignment>(
{
name: { type: String, trim: true, required: true },
modules: [
{
module: { type: Schema.Types.ObjectId, ref: 'AssignmentModule' },
dueDate: { type: Date },
},
],
},
);
// Create and export Mongoose model
const Assignment: Model<IAssignment> = model<IAssignment>(
'Assignment',
AssignmentSchema
);
export default Assignment;
字符串AssignmentModule
还有另一个模型
import { IAssignmentModule } from '../interfaces/app/IAssignmentModule';
const Schema = mongoose.Schema;
// Define Mongoose schema for Module
const AssignmentModuleSchema = new Schema<IAssignmentModule>(
{
title: { type: String },
questions: [{ type: Schema.Types.ObjectId, ref: 'Question' }],
},
{ timestamps: true, versionKey: false }
);
// Create and export Mongoose model
const AssignmentModule: Model<IAssignmentModule> =
mongoose.model<IAssignmentModule>('AssignmentModule', AssignmentModuleSchema);
export default AssignmentModule;
型
这是我的控制器函数,它应该给予我所有填充了modules.module
的赋值。
const assignments: IAssignment[] = await Assignment.find().populate([
{ path: 'modules', populate: 'modules.module' },
]);
型
我的最终目标是填充模块。模块,然后在模块内部,还有一个问题参考,需要填充一些选定的字段,比如name
和score
。我知道我可以链接人口,但我的第一个人口本身并没有发生。将您的字段命名为模块是否有任何问题?还是这里还缺了什么?
1条答案
按热度按时间bzzcjhmw1#
modules
是子文档,请参见Alternate declaration syntax for array。填充路径应为modules.module
。例如:
字符串
调试日志:
型