Ich bin mir nicht sicher, ob Sie alle Felder in einer SQL-ähnlichen Weise wollen, oder wenn Sie sie alle in einer richtigen MongoDB Art und Weise möchten.
Wenn Sie sie in der richtigen MongoDB-Weise möchten, dann entfernen Sie einfach die query.select
Zeile. Diese Zeile sagt nur die Felder, die darin aufgelistet sind, zurück.
Wenn Sie in einer SQL-ähnlichen Weise gemeint sind, funktioniert MongoDB nicht so. Jedes Dokument enthält nur die Felder, die Sie beim Einfügen eingefügt haben. Wenn Sie beim Einfügen des Dokuments nur bestimmte Felder angegeben haben, enthält dieses Dokument nur diese Felder, auch wenn andere Dokumente in anderen Sammlungen unterschiedliche Felder enthalten.
Um alle verfügbaren Felder in der Sammlung zu ermitteln, müssen Sie alle Dokumente finden, alle durchlaufen und ein Objekt mit den verschiedenen gefundenen Schlüsseln erstellen.
Wenn Sie jedes zurückgegebene Dokument benötigen, um immer die Felder zu haben, die Sie in Ihrer Auswahl angeben, müssen Sie nur Ihr Objekt nach der Rückgabe transformieren.
const fields = ['clientname', 'clientdocument', 'client_id', 'password', 'userclient'];
let Client = LisaClient.model('Client', ClientSchema)
let query = Client.findOne({ 'userclient': userclient })
query.select(fields.join(' '))
let result = yield query.exec()
fields.forEach(field => result[field] = result[field]);
Das forEach
Schleife setzen Sie alle Felder, die Sie wollen entweder der Wert im Ergebnis (wenn es dort war) oder undefined
, wenn es nicht war.
Vielen Dank !!! du bist ein Meister, hast nicht nur meine Frage beantwortet, du hast mir ein extra Werkzeug gegeben, danke. Und du hast recht, ich migiere mein Wissen von SQL zu noSQL. Meine mentale Struktur ist immer noch relational – maoooricio
Das ist, was ich irgendwie dachte. Ich hatte die gleichen mentalen Stolpersteine, als ich zum ersten Mal wechselte. Froh, dass es geholfen hat =) – samanime