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

mongoose kan ikke udfylde med typen String

I øjeblikket kun ObjectId værdier, der refererer til _id af en anden samling kan bruges som refs .

Her er en diskussion https://github.com/Automattic/mongoose/issues/2562

Det kan dog være en forbedring i fremtiden.

Faktisk er det ikke nødvendigt at tilføje default værdi at populate feltet, skal du blot definere fooAccessType som nedenfor

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

Til population

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

ObjectID bruges i population , og ObjectId er en 12-byte BSON-type, konstrueret ved hjælp af:

SuperAdmin er ikke et korrekt ObjectID . Du kan bruge UUID som standardværdien for ObjectID

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

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

Ovenstående kode er dog mærkelig, fooAccesType er reference til AccessType dokument.

Når du prøver at gemme field dokumentet AccessType skal gemmes først, og derefter få ObjectID fra denne gemte AccessType og tildel den til fooAccessType , til sidst, gem det nye field dokument.

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

       });
   }
});

Til population

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


  1. Er det dårlig praksis at bruge et mongo ObjectId som en brugers id?

  2. MongoDB og sammensatte primærnøgler

  3. MongoDB Replica Set Medlemsstat er ANDET

  4. MongoDB håndtering af indsættelsesfejl i Java