MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mangusto não pode preencher usando o tipo String


Atualmente, apenas ObjectId valores que se referem ao _id de outra coleção pode ser usado como refs .

Aqui está uma discussão https://github.com/Automattic/mongoose/issues/2562

No entanto, pode ser um aprimoramento no futuro.

Na verdade, não é necessário adicionar default valor para populate campo, basta definir o fooAccessType como abaixo
fooAccessType: {
    type: String, 
    ref: 'AccessType'
},  

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

O ObjectID é usado na population e o ObjectId é um tipo BSON de 12 bytes, construído usando:

Então SuperAdmin não é um ObjectID correto . Você pode usar UUID como o valor padrão de ObjectID
var uuid = require('node-uuid');

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

No entanto, o código acima é estranho, o fooAccesType é referência a AccessType documento.

Ao tentar salvar o field documento, o AccessType deve ser salvo primeiro, então pegue o ObjectID deste AccessType salvo e atribua-o a fooAccessType , eventualmente, salve o novo field documento.
var access = new AccessType({});
access.save(function(err){
   if (err)
      // error handling
   else {
       facilityperson.fooAccessType = access._id;
       facilityperson.save(function(err) {

       });
   }
});

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