我尝试了所有可能的语法来弄清楚如何在 mongoose 中填充数据,但都没有奏效,这是我的例子:
我试过了:
this._customerModel
.findOne({ _id: '60898b500870d6a664fc7403' })
.populate({ path: 'persons', populate: { path: 'persons.address' } });
还有这个:
this._customerModel
.findOne({ _id: '60898b500870d6a664fc7403' })
.populate({ path: 'persons' });
还有这个:
this._customerModel
.findOne({ _id: '60898b500870d6a664fc7403' })
.populate({ path: 'persons', model : 'Person' })
还有这个:
this._customerModel
.findOne({ _id: '60898b500870d6a664fc7403' })
.populate('persons');
他们都返回这个:
{
address: 60898b500870d6a664fc7404,
persons: [],
_id: 60898b500870d6a664fc7403,
siren: 'string',
companyName: 'string',
legalForm: 'string',
startDate: 'string',
__v: 0
}
如您所见,它甚至不返回人员内部的 ID。如果我不填充任何东西,它会返回:
{
address: 60898b500870d6a664fc7404,
persons: [ 60898b500870d6a664fc7405, 60898b500870d6a664fc7408 ],
_id: 60898b500870d6a664fc7403,
siren: 'string',
companyName: 'string',
legalForm: 'string',
startDate: 'string',
__v: 0
}
如您所见,数据就在那里。 地址实际上是一样的。它不会被填充它总是返回的 ObjectId 。 我正在注入这样的模型:
MongooseModule.forFeature(
[
{
name: 'Customer',
schema: customerSchema,
collection: 'customers',
},
],
'nosql',
)
我上网查了一下。 NestJs 中没有 3 级嵌套 populate() 的示例 如果那里有,或者您可能知道解决方案,如果您让我知道,我将不胜感激,谢谢。
@Schema()
export class Customer extends mongoose.Document {
@Prop()
id: string;
@Prop({ type: String })
companyName: string;
@Prop({ type: { type: mongoose.Schema.Types.ObjectId, ref: 'Address' } })
address: Address;
@Prop({ type: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Person' }] })
persons: Person[];
}
@Schema()
export class Person extends mongoose.Document {
@Prop()
id: string;
@Prop({ type: String })
firstName: string;
@Prop({ type: { type: mongoose.Schema.Types.ObjectId, ref: 'Customer' } })
customer: Customer;
@Prop({ type: { type: mongoose.Schema.Types.ObjectId, ref: 'Address' } })
address: Address;
}
@Schema()
export class Address extends mongoose.Document {
@Prop()
id: string;
@Prop({ type: String })
address1: string;
}
更新: 这个
this._customerModel
.findOne({ _id: '60898b500870d6a664fc7403' })
.populate('address')
.populate('persons')
返回:
{
address: 60898b500870d6a664fc7404,
persons: [
{
customer: 60898b500870d6a664fc7403,
_id: 60898b500870d6a664fc7405,
firstName: 'string',
__v: 0
},
{
address: 60898b500870d6a664fc7406,
customer: 60898b500870d6a664fc7403,
_id: 60898b500870d6a664fc7408,
firstName: 'string',
__v: 0
}
],
_id: 60898b500870d6a664fc7403,
companyName: 'string',
}
仍然不返回地址(级别 1),也不返回我尝试过的人下的地址。
答案 0 :(得分:0)
我在尝试制作一个 git 示例后发现它,这就是问题所在:
@Prop({ type: { type: mongoose.Schema.Types.ObjectId, ref: 'Address' } })
应该是这样的:
@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'Address' })
当然在 Array 类型中也是如此。 我很抱歉上网。