typeorm mongo db中的一对一关系
Posted
技术标签:
【中文标题】typeorm mongo db中的一对一关系【英文标题】:One to one relation in typeorm mongo db 【发布时间】:2020-09-28 09:14:32 【问题描述】:我如何使用 Typeform MongoDB 实现一对一的关系。
我正在尝试使用聚合连接两个文档,但没有成功。
请提供一种解决方案。
实体详情 1.国家:- _id,名称 2.state :- _id,name,countryid
export class Country
@ObjectIdColumn()
@Type(() => String)
_id: ObjectID;
@Column()
@IsString()
@IsNotEmpty()
@Index(unique: true)
name: string;
@Entity()
export class State
@ObjectIdColumn()
@Type(() => String)
_id: ObjectID;
@Column()
@IsNotEmpty()
name: string;
@ObjectIdColumn(nullable: false)
@IsNotEmpty()
countryId: ObjectID;
查找代码(选择所有状态)
let stateRepository: StateRepository = getCustomRepository(StateRepository);
try
const states = await stateRepository.aggregate([
$lookup:
from: 'country',
localField: 'countryId',
foreignField: '_id',
as: 'country'
]);
res.status(200).send(
data: states
);
catch (exception)
res.status(500).send(
error: exception,
);
输出:- 收到 500 且没有错误
"error":
【问题讨论】:
【参考方案1】:您能否将图像与您的数据库状态共享以确认?
除此之外,我唯一看到的(我认为这不是你的错误的原因)是你的 states const 是一个 mongo DB 游标(确切地说是AggregationCursor<T>
) ,您应该在聚合之后添加 toArray() :
const states = await stateRepository.aggregate(
...
).toArray();
顺便说一句,如果您的请求只返回一个国家/地区,您可能应该像这样添加 $unwind :
$unwind:
path: '$country',
includeArrayIndex: '0',
preserveNullAndEmptyArrays: false
这种方式而不是:
states = [ id: 'yourStateName', country : [id: 'yourCountryId', name: 'countryName' ], name: 'yourStateName']
您将拥有:
states = [ id: 'yourStateName', country : id: 'yourCountryId', name: 'countryName' , name: 'yourStateName']
【讨论】:
以上是关于typeorm mongo db中的一对一关系的主要内容,如果未能解决你的问题,请参考以下文章