2017-03-09 2 views
0

Ich möchte alle Felder eines Schemas in Mungo erhalten. Jetzt verwende ich den folgenden Code:Wählen Sie alle Felder in einem Mungo-Schema

let Client = LisaClient.model('Client', ClientSchema) 
let query = Client.findOne({ 'userclient': userclient }) 
query.select('clientname clientdocument client_id password userclient') 
let result = yield query.exec() 

Aber ich will alle Felder unabhängig davon, ob sie leer sind. Wie immer, im Voraus danke

Antwort

1

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.

+0

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

+0

Das ist, was ich irgendwie dachte. Ich hatte die gleichen mentalen Stolpersteine, als ich zum ersten Mal wechselte. Froh, dass es geholfen hat =) – samanime

0

MongoDB ist schemaless und hat keine Tabellen, jede Sammlung kann verschiedene Arten von Elementen haben. Normalerweise sind die Objekte irgendwie verwandt oder haben einen gemeinsamen Basistyp.

retrive invidual Aufzeichnungen mit

db.collectionName.findOne() oder db.collectionName.find().pretty()

Um alle wichtigen Namen, die Sie

mapReduceKeys = db.runCommand({ 
    "mapreduce": "collection_name", 
    "map": function() { 
     for (var key in this) { 
      emit(key, null); 
     } 
    }, 
    "reduce": function(key, stuff) { 
     return null; 
    }, 
    "out": "collection_name" + "_keys" 
}) 

Dann auf der resultierende Sammlung unterscheidbar MapReduce müssen erhalten laufen, um alle Schlüssel zu finden

db[mapReduceKeys.result].distinct("_id") //["foo", "bar", "baz", "_id", ...] 
Verwandte Themen