gpt4 book ai didi

javascript - Mongoose :使用 _id 以外的字段填充路径

转载 作者:行者123 更新时间:2023-12-04 13:15:17 26 4
gpt4 key购买 nike

默认情况下,mongoose/mongo 将使用 _id 字段填充路径,而且似乎没有办法将 _id 更改为其他内容。

这是我的两个模型,它们以一对多的关系连接:

const playlistSchema = new mongoose.Schema({
externalId: String,
title: String,
videos: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Video',
}],
});

const videoSchema = new mongoose.Schema({
externalId: String,
title: String,
});

通常,在查询播放列表时,您会使用 .populate('videos') 填充 videos,但在我的例子中,我想使用 externalId 字段而不是默认的 _id。这可能吗?

最佳答案

据我所知,目前使用 mongoose 实现此目的的方法是使用 virtuals .填充虚拟时,您可以将 localFieldforeignField 指定为您想要的任何内容,因此您不再绑定(bind)到默认的 _id 作为 外域。关于此的更多详细信息 here .

对于您问题中描述的场景,您需要将虚拟添加到 playerlistSchema,如下所示:

playlistSchema.virtual('videoList', {
ref: 'Video', // The model to use
localField: 'videos', // The field in playerListSchema
foreignField: 'externalId', // The field on videoSchema. This can be whatever you want.
});

现在,无论何时查询播放器列表,您都可以填充 videoList 虚拟以获取引用的视频文档。

PlaylistModel
.findOne({
// ... whatever your find query needs to be
})
.populate('videoList')
.exec(function (error, playList) {
/* if a playList document is returned */
playList.videoList; // The would be the populated array of videos
})

关于javascript - Mongoose :使用 _id 以外的字段填充路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61089089/

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