MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

mongoose non può popolare usando il tipo String

Attualmente, solo ObjectId valori che fanno riferimento a _id di un'altra collezione può essere usato come refs .

Ecco una discussione https://github.com/Automattic/mongoose/issues/2562

Tuttavia, potrebbe essere un miglioramento in futuro.

In realtà, non è necessario aggiungere default valore per populate campo, basta definire il fooAccessType come di seguito

fooAccessType: {
    type: String, 
    ref: 'AccessType'
},  

Per population

FacilityPersonnel.findOne({_id:req.params.id})
    .populate('fooAccessType')
    .exec(

Il ObjectID è usato nella population e ObjectId è un tipo BSON a 12 byte, costruito utilizzando:

Quindi SuperAdmin non è un ObjectID corretto . Potresti usare UUID come valore predefinito di ObjectID

var uuid = require('node-uuid');

// ...
fooAccessType: {
    type: String, 
    default: uuid.v1, 
    ref: 'AccessType'
},  

Tuttavia, il codice sopra è strano, il fooAccesType fa riferimento a AccessType documento.

Quando prova a salvare il field documento, il AccessType deve essere prima salvato, quindi ottenere l'ObjectID da questo AccessType salvato e assegnalo a fooAccessType , eventualmente, salva il nuovo field documento.

var access = new AccessType({});
access.save(function(err){
   if (err)
      // error handling
   else {
       facilityperson.fooAccessType = access._id;
       facilityperson.save(function(err) {

       });
   }
});

Per population

FacilityPersonnel.findOne({_id:req.params.id})
    .populate('fooAccessType')
    .exec(