wake-up-neo.com

MongoDB - Fehler: Das Dokument muss vor dem Speichern eine _id haben

Ich habe so viel mit diesem Projekt zu kämpfen. Ich verfolge ein Tutorial, das in einigen Bereichen veraltet ist. Beispielsweise verwendete ihre Jquery-Version ein völlig anderes Format für einige Funktionen, und ich musste einige Änderungen vornehmen. Aber ich denke, ich habe ein letztes großes Problem, für das ich keine Lösung finden kann. In meiner Schemavariable habe ich die Typen _id, Benutzername und Passwort

var UserSchema = new mongoose.Schema({
    _id: mongoose.Schema.ObjectId,
    username: String,
    password: String
}); 

aber wenn ich versuche, einen neuen Benutzer zu meiner App hinzuzufügen, erscheint anstelle von der Warnung, die ich erhalten soll, es als [object Object] und es wird nichts zur Datenbank hinzugefügt. Dieser Fehler wird dann im Mongo-Cmd angezeigt 

"Fehler: Dokument muss vor dem Speichern eine _id haben".

Ich habe versucht, die _id-Zeile auszukommentieren, und ich bekomme die richtige Nachricht, aber in meiner Datenbank wird immer noch nichts angezeigt.

8
Matt Lee

Es ist ziemlich einfach:

  1. Wenn Sie das _id-Feld explizit im Schema deklariert haben, müssen Sie es explizit initialisieren
  2. Wenn Sie es nicht im Schema angegeben haben, wird es von MongoDB deklariert und initialisiert.

Was Sie nicht tun können, ist, es im Schema zu haben und es nicht zu initialisieren. Es wird den Fehler werfen, über den Sie sprechen

16
dasfdsa

Versuchen Sie es unten mit einem Ausschnitt, den ich _id als userId nennen möchte, auf den Sie auch verzichten können.

var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;

var UserSchema = new Schema({
    username: String,
    password: String
});
UserSchema.virtual('userId').get(function(){
    return this._id;
});

1
user3172272

_id wird automatisch von MongoDb hinzugefügt.

Wenn Sie _id in Ihrer Datenstruktur beibehalten möchten, müssen Sie die korrekte Initialisierung durchführen:

var obj = new UserSchema({ 
    "_id": new ObjectID(), 
    "username": "Bill", 
    "password" : "...." 
});
1
Andrea Girardi