MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mungo kann nicht mit dem Typ String gefüllt werden

Derzeit nur ObjectId Werte, die auf die _id verweisen einer anderen Sammlung können als refs verwendet werden .

Hier ist eine Diskussion https://github.com/Automattic/mongoose/issues/2562

Es könnte jedoch eine Verbesserung in der Zukunft sein.

Eigentlich ist es nicht nötig, default hinzuzufügen Wert zum populate Feld, definieren Sie einfach den fooAccessType wie unten

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

Für population

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

Die ObjectID wird in der population verwendet , und die ObjectId ist ein 12-Byte-BSON-Typ, konstruiert mit:

Also SuperAdmin ist keine korrekte ObjectID . Sie könnten UUID verwenden als Standardwert von ObjectID

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

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

Der obige Code ist jedoch seltsam, der fooAccesType ist ein Verweis auf AccessType Dokument.

Beim Versuch, das field zu speichern Dokument, der AccessType sollte zuerst gespeichert werden, dann die ObjectID abrufen aus diesem gespeicherten AccessType und weisen Sie es fooAccessType zu , speichern Sie schließlich das neue 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(