javascript - Mongoose:使用 _id 以外的字段填充路径
问题描述
默认情况下,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,
});
videos
通常,在查询播放列表时,您只会使用填充.populate('videos')
,但在我的情况下,我想使用该externalId
字段而不是默认的_id
. 那可能吗?
解决方案
据我所知,目前使用 mongoose 实现此目的的方法是使用virtuals。填充虚拟时,您可以将localField
and指定为foreignField
您想要的任何内容,因此您不再被绑定到默认值_id
as foreignField
。更多细节在这里。
对于您的问题中描述的场景,您需要向 中添加一个虚拟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
})
推荐阅读
- spring-webflux - 奇怪的行为 webflux 然后操作员忽略错误
- javascript - vue.js中带有护照的令牌授权标头
- c# - 带有组合框的 Datagridview 引用自己的数据集混合行
- node.js - 解决时:@typegoose/typegoose@7.2.0 npm ERR!找到:mongoose@6.0.6 node_modules mongoose
- amazon-web-services - AWS Pinpoint 查看提交的记录
- artifactory - Artifactory Replication 默认\设置一次,复制给其他人
- jenkins - Jenkins 流水线:跳过 ARM 代理
- ssl - 了解如何使用 ARM PSA cryoto API 实现类似 TLS 的协议
- javascript - 级联行删除javascript
- javascript - 为什么可以通过浏览器访问网站,wheares编写简单的代码来获取,但得到403错误