Mongodb 填充未填充 Node.js 中的文档
Mongodb Populate is not populating document in Node.js
我正在使用 typegoose,我的 Query
和 QueryRule
模型如下。
export class Query {
@prop()
queryRule: Ref<QueryRule>;
}
export class QueryRule {
@prop()
condition: Condition;
@prop()
rules: Ref<QueryRule | ChildRule>[];
}
我正在使用以下查询来填充。
await QueryModel.findById(queryId).populate('queryRule');
我的查询文档如下。
{"_id":{"$oid":"6283d73baffa60c38af8c2f0"},"name":"test","queryRule":{"$oid":"6287c8f0e3ab4b5dd7238ef3"}}
我的QueryRule文档如下。
{"_id":{"$oid":"6287c8f0e3ab4b5dd7238ef3"},"condition":1,"rules":[],"__v":0}
但是当我使用填充查询访问 QueryRule 的 condition
和 rules
时。即使该文档中存在值,我也未定义。
我做错了什么?
@prop({
ref: () => QueryRule | ChildRule,
required: true
})
rules: Ref<QueryRule | ChildRule>[];
您的问题似乎是缺少必需的选项 ref
,请参阅 Typegoose 文档中的 Reference other Classes。
在您的情况下,您的代码应该更像:
export class Query {
@prop({ ref: () => QueryRule })
queryRule: Ref<QueryRule>;
}
export class QueryRule {
@prop()
condition: Condition;
//@prop({ ref: () => QueryRule })
//rules: Ref<QueryRule | ChildRule>[];
}
至于 Ref<QueryRule | ChildRule>[]
,您要么必须将其限制为 2 种可能性中的一种,要么使用鉴别器,请参阅 Typegoose 文档中的 Non-Nested Discriminators。
也作为小side-note,如果你的condition: Condition
不是也是typegooseclass,就会变成Mixed
,基本就是一个any
] 在猫鼬中运行时键入。
为此我需要两件事。
- 首先是我失踪了
{ ref: () => QueryRule }
- 然后在填充中我必须像这样传递模型
{ path : 'queryRule', model: QueryRuleModel }
export class Query {
@prop({ ref: () => QueryRule })
queryRule: Ref<QueryRule>;
}
let query: Query = await QueryModel
.findById(queryId)
.populate({ path : 'queryRule', model: QueryRuleModel });
我正在使用 typegoose,我的 Query
和 QueryRule
模型如下。
export class Query {
@prop()
queryRule: Ref<QueryRule>;
}
export class QueryRule {
@prop()
condition: Condition;
@prop()
rules: Ref<QueryRule | ChildRule>[];
}
我正在使用以下查询来填充。
await QueryModel.findById(queryId).populate('queryRule');
我的查询文档如下。
{"_id":{"$oid":"6283d73baffa60c38af8c2f0"},"name":"test","queryRule":{"$oid":"6287c8f0e3ab4b5dd7238ef3"}}
我的QueryRule文档如下。
{"_id":{"$oid":"6287c8f0e3ab4b5dd7238ef3"},"condition":1,"rules":[],"__v":0}
但是当我使用填充查询访问 QueryRule 的 condition
和 rules
时。即使该文档中存在值,我也未定义。
我做错了什么?
@prop({
ref: () => QueryRule | ChildRule,
required: true
})
rules: Ref<QueryRule | ChildRule>[];
您的问题似乎是缺少必需的选项 ref
,请参阅 Typegoose 文档中的 Reference other Classes。
在您的情况下,您的代码应该更像:
export class Query {
@prop({ ref: () => QueryRule })
queryRule: Ref<QueryRule>;
}
export class QueryRule {
@prop()
condition: Condition;
//@prop({ ref: () => QueryRule })
//rules: Ref<QueryRule | ChildRule>[];
}
至于 Ref<QueryRule | ChildRule>[]
,您要么必须将其限制为 2 种可能性中的一种,要么使用鉴别器,请参阅 Typegoose 文档中的 Non-Nested Discriminators。
也作为小side-note,如果你的condition: Condition
不是也是typegooseclass,就会变成Mixed
,基本就是一个any
] 在猫鼬中运行时键入。
为此我需要两件事。
- 首先是我失踪了
{ ref: () => QueryRule }
- 然后在填充中我必须像这样传递模型
{ path : 'queryRule', model: QueryRuleModel }
export class Query {
@prop({ ref: () => QueryRule })
queryRule: Ref<QueryRule>;
}
let query: Query = await QueryModel
.findById(queryId)
.populate({ path : 'queryRule', model: QueryRuleModel });