Mongoose:带参考的预售文档

Mongoose: presave document with reference

本文关键字:文档 参考 Mongoose      更新时间:2023-09-26

如果引用另一个集合的文档的_id不能立即可用,那么保存该文档的最佳做法是什么?

var ModelA = new Schema({
  aUniqueIdentifer: String,
  ...
)};

ModelA的aUniqueIdentifier是从另一个数据源提供的,其他模型使用它来识别它

var ModelB = new Schema({
  aUniqueForeignKey: type String,
  aRef : {
    type: mongoose.Schema.Types.ObjectID,
    ref: 'ModelA'
  }
)};

所以我可以保存一个模型a:modelA = new ModelA({aUniqueIdentifer: '500'});

然后,为了保存mobdelB,我需要用ModelA对象填充它的aRef。这样做的最佳做法是什么?在尝试保存之前,我应该执行findOne(aUniqueForeignKey)来返回对象吗?这似乎不是很有效。

我研究了populate,但这似乎是针对现有的引用。

您可以使用.pre方法创建一个在保存之前运行的方法,然后将您的逻辑放入其中。它看起来像这样:

ModelB.pre('save', function(next) {
    // Check if id is available
    // if not run another method
    // run next() to exit
    next();
});

这将在您保存ModelB之前运行。

希望这能有所帮助,如果你添加更多信息,我可能会提供更具体的解决方案。

您可以尝试使用populate。

填充是将文档中指定的路径自动替换为其他集合中的文档的过程

http://mongoosejs.com/docs/populate.html