gpt4 book ai didi

mongodb - typeorm mongo db 中的一对一关系

转载 作者:行者123 更新时间:2023-12-04 11:15:08 27 4
gpt4 key购买 nike

我如何使用 Typeform MongoDB 实现一对一的关系。

我正在尝试使用聚合加入两个文档,但没有成功。

请提供一种解决方案。

实体详情
1.country :- _id,name
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": {}
}

最佳答案

您能否与您的数据库状态共享图像以确保?
除此之外,我看到的唯一一件事(我不认为这是导致错误的原因)是您的状态 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']

关于mongodb - typeorm mongo db 中的一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62278444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com