如何使用属性读取MongoDB中的另一个集合



在我的平均堆栈应用中,我能够从我的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_artistvenue&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
        }
    }
])

注意:

  1. event_venueevent_artist必须类型ObjectId不能正确匹配的字符串。

  2. 我没有在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>

相关内容

  • 没有找到相关文章

最新更新