繁体   English   中英

mongoose - 引用子文档的 ObjectId

[英]mongoose - ObjectId that references a Sub-Document

有没有可能在MODELA一个的ObjectId在modelB引用一个子文件?

var C = new Schema({...});  
var B = new Schema({c: [C]});  
var A = new Schema({c: { type: ObjectId, ref: 'ModelB.ModelC' });  

var Model_A = mongoose.model('ModelA', A);  
var Model_B = mongoose.model('ModelB', B);  
var Model_C = mongoose.model('ModelC', C);  

是的,这是可能的,但您有几个选择。


选项 1:C 作为子文档

如果确实要使用子文档,则无需创建单独的模型。 您需要更改对“c”数组的引用。

var C = new Schema({...});  
var B = new Schema({c: [C]});  
var A = new Schema({c: { type: ObjectId, ref: 'ModelB.c' });  

var Model_A = mongoose.model('ModelA', A);  
var Model_B = mongoose.model('ModelB', B); 

选项 2:C 作为模型

(我仅将其作为替代方案提出 - 因为您的示例似乎是多余的,因为您将“C”创建为单独的模型以及子文档)

或者,拥有单独的集合可能是有意义的,您可以为每个集合创建一个猫鼬模型。 每个将是一个单独的集合:

var Model_A = mongoose.model('ModelA', A);  
var Model_B = mongoose.model('ModelB', B);  
var Model_C = mongoose.model('ModelC', C);

在这种情况下,您可能希望直接引用每个模型:

var C = new Schema({...});  
var B = new Schema({c: { type: ObjectId, ref: 'ModelC' }});  
var A = new Schema({c: { type: ObjectId, ref: 'ModelC' }); 

重点

是的,这是可能的,但是您需要选择是否要将 C 作为模型或子文档。

已经 7 年了,但我遇到了同样的问题,我找到了插件mongoose-sub-references-populate来填充子文档。

 const subReferencesPopulate = require('mongoose-sub-references-populate'); var B = new Schema({c: [C]}); var A = new Schema({c_inA: { type: ObjectId, subRef: 'ModelB.c' }); A.plugin(subReferencesPopulate); var Model_A = mongoose.model('ModelA', A); var Model_B = mongoose.model('ModelB', B); Model_A.findById(_id,async (error, res)=>{ await res.subPopulate('c_inA'); console.log(res); })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM