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

Mongoose: Populate path using field other than _id(Mongoose:使用_id以外的字段填充路径)
本文介绍了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,
});
通常,在查询播放列表时,您只需使用.populate('videos')填充videos,但在我的示例中,我希望使用externalId字段而不是默认的_id。这可能吗?

推荐答案

据我所知,目前Mongoose实现这一点的方式是使用virtuals。在填充虚拟时,您可以将localFieldforeignField 指定为您想要的任何值,因此您不再绑定到默认的_idforeignField。有关此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
  })

这篇关于Mongoose:使用_id以外的字段填充路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)