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.

Legendre
quelle

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).

JohnnyHK
quelle
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 ()

Wahrscheinlich
quelle
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.

Bonnie Varghese
quelle
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 .

vkarpov15
quelle
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