MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mangouste ne peut pas remplir en utilisant le type String

Actuellement, seul ObjectId les valeurs qui font référence au _id d'une autre collection peut être utilisé comme refs .

Voici une discussion https://github.com/Automattic/mongoose/issues/2562

Cependant, cela pourrait être une amélioration à l'avenir.

En fait, il n'est pas nécessaire d'ajouter default valeur à populate champ, définissez simplement le fooAccessType comme ci-dessous

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

Pour la population

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

L'ObjectID est utilisé dans la population , et le ObjectId est un type BSON de 12 octets, construit à l'aide :

Donc SuperAdmin n'est pas un ObjectID correct . Vous pouvez utiliser UUID comme valeur par défaut de ObjectID

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

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

Cependant, le code ci-dessus est bizarre, le fooAccesType fait référence à AccessType document.

Lorsque vous essayez d'enregistrer le field document, le AccessType doit être enregistré en premier, puis obtenir le ObjectID à partir de ce AccessType enregistré et attribuez-le à fooAccessType , éventuellement, enregistrez le nouveau field document.

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

       });
   }
});

Pour la population

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