2014-07-20 17 views

risposta

14

Sì, è possibile, ma sono disponibili alcune opzioni.


Opzione 1: C come un documento secondario

Se davvero si vuole utilizzare documenti secondari, non è necessario creare un modello separato. È necessario modificare il riferimento alla matrice '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); 

Opzione 2: C come modello

(Vi presento solo questo come un'alternativa - dal momento che il vostro esempio sembra ridondante poiché si crea 'C' come un modello separato, nonché un documento secondario)

In alternativa, può essere utile disporre di raccolte separate, è possibile creare un modello di mangusta per ciascuna. Ognuno sarà una raccolta differenziata:

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

In questo caso si consiglia di fare riferimento direttamente ogni modello:

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

The Point

Sì, è possibile, ma si è necessario selezionare se si desidera C come modello o documento secondario.

+5

la prima soluzione non funziona per me. Nel mio caso i modelli B e C sono gli stessi però ('User' ha una lista di amicizie in' friends' e ogni amicizia ha un riferimento alla sua controparte in senso antiorario). Ho capito: 'MissingSchemaError: Schema non è stato registrato per il modello" User.friends ".' – sol

+1

Anche io sto affrontando lo stesso problema di @ S0lll0s. L'opzione 1 non sembra funzionare. – ramdog

+0

@ramdog Non ho ancora trovato una soluzione che mi permetta di compilare un self-reference sotto documento, io uso solo un ObjectId "vuoto" e lo cerco da solo. Fammi sapere se trovi qualcosa, ma sono tentato di credere che non ci sia ancora una soluzione. – sol

Problemi correlati