在我的平均堆栈应用中,我能够从我的mongodb显示一个 Event
对象。
下面是该对象的样子的一个示例:
{
"_id" : ObjectId("5d415feedb87bc4470c560be"),
"event_name" : "test event",
"event_venue" : "5d40590dd4ea332774e940cb",
"event_artist" : "5d406855171c152868ba71c8",
"event_price" : "10",
"__v" : 0
}
这是检索上述数据的打字稿:
ngOnInit() {
getEvent(): void {
this.route.params.subscribe(params => {
this.eventService.getEvent(params['id']).subscribe(res => {
this.event = res;
});
});
}
}
这是我的EventService中的getEvent()
方法:
getEvent(id) {
return this
.http
.get(`${this.uri}/get/${id}`);
}
以下是当前的HTML:
<div>
Event Name: {{event.event_name}}
Venue: {{event.event_venue}}
Artist:{{event.event_artist}}
Price: {{event.event_price}}
</div>
以上值event_venue
&amp;event_artist
是venue
&amp;artist
对象。
例如,这是我的venue
对象:
{
"_id" : ObjectId("5d40590dd4ea332774e940cb"),
"venue_name" : "diceys",
"venue_location" : "camden street",
"__v" : 0
}
venue
的 _id 是 event_venue 在 event
中。
而不仅仅是显示event.event_venue
,有人可以告诉我如何使用它检索venue.venue_name
?
而不是在您的前端做某事,而是应该通过聚合更改MongoDB的查询并获取完整的细节。
eg:
db.event.aggregate([
{
$lookup: {
from: 'venue',
localField: 'event_venue',
foreignField: '_id',
as: 'venue'
}
},
{
$unwind: "$venue"
},
{
$project: {
_id: true,
event_name: true,
event_venue: "$venue.venue_name",
event_artist: true,
event_price: true
}
}
])
注意:
event_venue
和event_artist
必须类型ObjectId
不能正确匹配的字符串。我没有在
artist
上进行查看,因为您没有提供其详细信息,如果您想修改以下代码以获取与地点相同的正确艺术家详细信息。
{
$lookup: {
from: 'artist',
localField: 'event_artist',
foreignField: '_id',
as: 'artist'
}
},
{
$unwind: "$artist"
},
{
event_artist:"$artist.name",
}
响应
{
"_id" : ObjectId("5d415feedb87bc4470c560be"),
"event_name" : "test event",
"event_artist" : ObjectId("5d406855171c152868ba71c8"),
"event_price" : "10",
"event_venue" : "diceys"
}
Angular
<div>
Event Name: {{event.event_name}}
Venue: {{event.event_venue}}
Artist:{{event.event_artist}}
Price: {{event.event_price}}
</div>