sql >> Databasteknik >  >> NoSQL >> MongoDB

mongoose kan inte befolkas med typen String

För närvarande endast ObjectId värden som refererar till _id av en annan samling kan användas som refs .

Här är en diskussion https://github.com/Automattic/mongoose/issues/2562

Det kan dock bli en förbättring i framtiden.

Egentligen är det inte nödvändigt att lägga till default värde att populate fältet definierar du bara fooAccessType som nedan

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

För population

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

ObjectID används i population och ObjectId är en 12-byte BSON-typ, konstruerad med:

Alltså SuperAdmin är inte ett korrekt ObjectID . Du kan använda UUID som standardvärde för ObjectID

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

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

Ovanstående kod är dock konstig, fooAccesType är referens till AccessType dokument.

När du försöker spara field dokumentet, AccessType bör sparas först och sedan hämta ObjectID från denna sparade AccessType och tilldela den till fooAccessType , så småningom, spara det nya field dokument.

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

       });
   }
});

För population

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


  1. Tryck värde till Array om nyckeln inte finns Mongoose

  2. Hur fungerar Mongooses spara-återuppringning?

  3. mongoengine sparmetoden är utfasad?

  4. Extrahera två undermatrisvärden i mongodb med $elemMatch