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中的一对一关系的主要内容,如果未能解决你的问题,请参考以下文章

如何与类型存储在 db 中的模型建立一对多关系

flask中一对一,一对多以及多对多关系的设定

如何在 App Engine 中表示一对一的关系

Flask 学习-78.Flask-SQLAlchemy 一对多关系

Flask框架之一对多关系模型定义

Flask 学习-84.Flask-SQLAlchemy 一对多关系级联删除