是的,这是可能的,但你有几个选择。
选项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);
选择二:以C作为模型
(我仅提供此作为备选方案——因为您的示例似乎是冗余的,因为您将'C'创建为单独的模型以及子文档)
或者,将它们作为单独的集合可能更有意义,您可以为每个创建一个mongoose模型。每个都将成为一个单独的集合:
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作为模型还是子文档。
User
具有friends
中朋友列表,并且每个朋友关系都引用其其他方向的计数器部分)。我遇到了这个问题:MissingSchemaError: Schema hasn't been registered for model "User.friends"
。 - s-olmongoose-id-validator
(https://www.npmjs.com/package/mongoose-id-validator)。你也碰巧在使用它吗?我删除了该插件的使用,上述第一种选项确实有效。 - ramdog