MongoDB über Mongoose JS - Was ist findByID?


70

Ich schreibe einen NodeJS-Server mit ExpressJS, PassportJS, MongoDB und MongooseJS. Ich habe es gerade geschafft, PassportJS dazu zu bringen, Benutzerdaten, die über Mongoose erhalten wurden, zur Authentifizierung zu verwenden.

Aber damit es funktioniert, musste ich eine "findById" -Funktion wie unten verwenden.

var UserModel = db.model('User',UserSchema);

UserModel.findById(id, function (err, user) { < SOME CODE > } );

UserModelist ein Mungomodell. Ich erkläre das Schema UserSchemafrüher. Also UserModel.findById()ist es wohl eine Methode des Mungomodells?

Frage

Was macht findByIdund gibt es Dokumentation dazu? Ich habe ein bisschen gegoogelt, aber nichts gefunden.

Antworten:


139

findByIdist eine bequeme Methode für das von Mongoose bereitgestellte Modell, um ein Dokument anhand seiner _id zu finden. Die Dokumentation dazu finden Sie hier .

Beispiel:

// Search by ObjectId
var id = "56e6dd2eb4494ed008d595bd";
UserModel.findById(id, function (err, user) { ... } );

Funktionell ist es dasselbe wie das Aufrufen von:

UserModel.findOne({_id: id}, function (err, user) { ... });

Beachten Sie, dass Mongoose den angegebenen idWert in den _idim Schema definierten Typ umwandelt (standardmäßig ObjectId).


1
Was ist der Datentyp der ID? Ist es eine Zeichenfolge oder eine ObjectId?
Bubakazouba

2
@bubakazouba idwird _idin den im Schema definierten Typ umgewandelt (standardmäßig ObjectId).
JohnnyHK

Weiß jemand, ob es auch eine Convenience-Methode zum Entfernen von ByById gibt?
Alexander Mills

4
@ AlexanderMills gibt es. Es heißtfindByIdAndRemove
Babalola Rotimi

9

Wenn das Schema der ID nicht vom Typ ObjectId ist , können Sie nicht mit der folgenden Funktion arbeiten: findbyId ()


7

Im Gegensatz zu find (), das 1 oder mehrere Dokumente zurückgeben kann, kann findById () nur 0 oder 1 Dokument zurückgeben. Dokument (e) können als Datensatz (e) betrachtet werden.


4

Ich bin der Betreuer von Mongoose. findById()ist eine integrierte Methode für Mungomodelle. findById(id)ist äquivalent zu findOne({ _id: id }), mit einer Einschränkung: findById()mit 0 params ist äquivalent zu findOne({ _id: null }).

Weitere findById()Informationen finden Sie in den Mongoose-Dokumenten und in diesem findById()Tutorial .


Ich erhalte die folgende Fehlermeldung:{ "message": "Cast to ObjectId failed for value \"{ id: '5d9a3b073f308e32b47a5cbb' }\" at path \"_id\" for model \"Categories\"", "name": "CastError", "stringValue": "\"{ id: '5d9a3b073f308e32b47a5cbb' }\"", "kind": "ObjectId", "value": { "id": "5d9a3b073f308e32b47a5cbb" }, "path": "_id" }
Jasim Khan Afridi

1
Sieht so aus, als würden Sie ein Objekt mit einer idEigenschaft anstelle einer Zeichenfolge oder einer ObjectId-Instanz übergeben. Versuchen Sie typeof valval.constructor.namefindById()
auszudrucken

Ich habe viele Kombinationen ausprobiert. Oder darf ich sagen, alle Kombinationen. Ich habe keine Eigenschaft namens id. Ich habe keine Eigenschaft vom Typ ObjectId.
Jasim Khan Afridi

in Ordnung. fand meinen Fehler heraus. es war dumm. Ich habe ein ID-Objekt als {id: 'blablabla'} anstelle eines Strings übergeben ...
Jasim Khan Afridi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.