2016-11-21 4 views
0

Wenn ein Mungo Tutorial folgenden ein Schema Feld mit dem Namen followers hat den Typ als ein Array von ObjectId: followers:[Schema.Types.ObjectId]Mungo Fehler zu gieße ObjectId für Wert xxx konnte nicht mit Postbote

i Postbote verwendet, um ein neues Dokument vorlegen und die POST-Daten haben das JSON-Format:

{ 
"title":"test title999", 
"text":"test text999b", 
"meta":[1, [], 'three', { four: 5 }], 
"followers":["582ff61afe100611809e7fa5"] 
} 

die Eilpfosten Route der Anwendung hat eine Validate-Methode, und ich habe kein Problem mit allen Bereichen außer dem metionned oben, wie ich diesen Fehler hätte:

012.351.
{ 
    "message": "Post validation failed", 
    "name": "ValidationError", 
    "errors ":{ 
     "followers ": 
     {"message ":"Cast to ObjectID failed for value\ "[ '\"577f9cecd71d71fa1fb6f43a\ "' ]\" at path \"followers\"", 
      "name": "CastError", 
      "kind": "ObjectID ", 
      "value ":["\"577f9cecd71d71fa1fb6f43a\""], 
      "path": "followers", 
      "reason": { 
       "message ":"Cast to ObjectId failed for value\ "[ '\"577f9cecd71d71fa1fb6f43a\"' ]\" at path\ "followers\"", 
       "name": "CastError", 
       "kind": "ObjectId", 
       "value": ["\"577f9cecd71d71fa1fb6f43a\ ""], 
       "path": "followers" 
      } 
     } 
    } 
} 

---- EDIT -----

Das Validate-Methode in der POST-Route:

app.post('/posts', function(req, res, next) { 
    var post = new Post(req.body); 
    post.validate(function(error){ 
     console.log("\n\n validate error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     post.save(function(error, result){ 
      console.log("\n\n save error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     res.send(result); 
    }); 
    }); 

}); 

und das Modell:

var postSchema = new Schema({ 
    title:{ 
     type:String, 
     required:true, 
     trim:true, 
     match:/^([\w ,.!?]{1,100})$/ 
    }, 
    text:{ 
     type:String, 
     required:true, 
     max:2000 
    }, 
    followers:[Schema.Types.ObjectId], 
    meta:Schema.Types.Mixed, 
    viewCounter:Number, 
    published:Boolean, 
    createdAt:{ 
     type:Date, 
     default:Date.now, 
     required:true 
    }, 
    updatedAt:{ 
     type:Date, 
     default:Date.now, 
     required:true 
    } 

}); 
+0

Würden Sie weitere Details zu Ihrer Validierungsmethode angeben? Dein Modell? –

+0

fertig, es ist aktualisiert – Bardelman

Antwort

0

Sie müssen Fügen Sie einen Verweis auf followers Attribut in post Modell, vorausgesetzt, das andere Modell heißt user so würde es wie folgt sein:

followers: {type: Schema.Types.ObjectId, ref: 'User'} 

Lesen Sie mehr in Mungo von here verweisen. Ich fand

0

Nachdem einige weitere Beispiele für die Verwendung von eingebetteten Dokumente in Mungo (als this one) Voila, die Lösung zu lesen: Der followers Feldwert kommt als String im Objekt und kann nicht automatisch auf einen ObjectId umgewandelt werden. Durch das Parsen:

req.body.followers = JSON.parse(followers); 

war es möglich, es unter anderen Feldern zu speichern. Die POST-Route wurde wie folgt aus:

app.post('/posts', function(req, res, next) { 
    req.body.followers = JSON.parse(req.body.followers); 
    var post = new Post(req.body); 
    post.validate(function(error){ 
     console.log("\n\n validate error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     post.save(function(error, result){ 
      console.log("\n\n save error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     res.send(result); 
    }); 
    }); 

}); 

Daher kann die POST-Anforderung nicht zu 100% dynamisch und einige spezifische convertions müssen vor dem Prozess speichern erfolgen. Wie für Basim Hennawi Antwort keine Notwendigkeit für die Ref-Feld, das Feld des Schemas hinzugefügt werden.

Verwandte Themen