sql >> Database >  >> NoSQL >> MongoDB

mangoest kan niet vullen met het type String

Momenteel alleen ObjectId waarden die verwijzen naar de _id van een andere collectie kan worden gebruikt als refs .

Hier is een discussie https://github.com/Automattic/mongoose/issues/2562

Het kan in de toekomst echter een verbetering zijn.

Het is eigenlijk niet nodig om default . toe te voegen waarde om populate veld, definieer gewoon het fooAccessType zoals hieronder

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

Voor population

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

De ObjectID wordt gebruikt in de population , en de ObjectId is een 12-byte BSON-type, geconstrueerd met:

Dus SuperAdmin is niet één juiste ObjectID . Je zou UUID kunnen gebruiken als de standaardwaarde van ObjectID

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

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

De bovenstaande code is echter raar, de fooAccesType is een verwijzing naar AccessType document.

Wanneer probeer je het field op te slaan document, het AccessType moet eerst worden opgeslagen en vervolgens de ObjectID . ophalen van dit opgeslagen AccessType en wijs het toe aan fooAccessType , sla uiteindelijk het nieuwe field op document.

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

       });
   }
});

Voor population

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


  1. MongoDB Java Driver Update Subdocument

  2. Mongoose zelfverwezen schema maakt geen ObjectId voor alle subdocumenten

  3. Installeer Memcached op Ubuntu 16.04

  4. Externe toegang van Golang en MongoDb mislukt (server heeft fout geretourneerd bij SASL-verificatiestap:verificatie mislukt.)