2017-02-28 5 views
0

Zunächst einmal, keine Sorge, es ist ein winziger Datensatz - ich weiß, es wäre nicht klug, eine gesamte Produktions-DB über eine API auf einen einzigen Bildschirm zu dumpen ... Ich brauche nur einen JSON-Dump der gesamten (kleinen) DB, um über einen API-Endpunkt in einer Node.js-Anwendung zurückzukehren.Zeigen Sie den gesamten MongoDB Inhalt in Node.js API

Meine Anwendung erfolgreich einzelne Datensätze mit diesem Code zurückgibt:

MongoClient.connect("mongodb://localhost:27017/search", function (err, db) { 

    if(err) throw err; 

    db.collection('results', function(err, collection) { 
     // search for match that "begins with" searchterm 
     collection.findOne({'string':new RegExp('^' + searchterm, 'i')}, function(err, items){ 
      // get result 
      var result; 
      if (items == null || items.result == null){ 
       result = ""; 
      } 
      else { 
       result = items.result; 
      } 
      // return result 
      res.send(result); 
     }); 
    }); 
}); 

So weiß ich, Knoten erfolgreich zu Mongo spricht, aber wie kann ich diese Abfrage/Code optimieren, um im Grunde zurückgeben, was Sie bekommen, wenn Sie ausführen Folgendes in der MongoDB-Befehlszeile:

$ db.results.find() 

Antwort

0

Danke Jungs, ich schätze Ihre Antworten, die mir in die richtige Richtung zeigen, was die Verwendung von {} als Abfrage betrifft. Hier ist der Code, der schließlich für mich gearbeitet:

db.collection('results', function(err, collection) { 
    collection.find({}).toArray(function(err, docs) { 
     res.send(docs); 
    }); 
}); 

Das entscheidende Element ist das toArray (...) Teil.

+0

Ich bin sehr gespannt, warum Sie 'toArray' aufsetzen müssen. Möchten Sie wissen, welche Version von MongoDB/Mongoose Sie verwenden? –

+0

Ich werde ehrlich sein, ich habe keine Ahnung, was Mungo ist. Ich verwende v3.2.0 von MongoDB unter Mac OS X Sierra. Ich habe mich anArray (...) gewöhnt, denn nach einer Menge zufälliger Versuche ist dies das erste, was funktioniert hat. Wenn Sie eine richtige Alternative vorschlagen, werde ich es versuchen. – HomerPlata

+0

Mongoose ist ein Wrapper um MongoDB für JavaScript/Node.js, der Dinge in leicht wartbaren und lesbaren Code abstrahiert. Ich denke, deshalb hat meine vorgeschlagene Lösung nicht funktioniert. Mungo macht wahrscheinlich genau das, was Sie getan haben: 'toArray()' intern. –

2

Dies ist ein Snippet.

model.find({}).exec(function (err, result) { 
     if (err) {console.error(err); return;} 
     else return result; 
    }); 

Verwenden Sie zuerst Ihr vordefiniertes Modell und Anruf finden. Die Logik besteht darin, ein leeres Objekt {} im Wesentlichen zu rendern. Wählen Sie alle aus diesem Modell.

Sinn machen?

+0

Ich empfehle auch, Versprechungen zu verwenden, mit mongodb. vorzugsweise Bluebird. – Remario

1

Genau so, wie Sie es beschrieben haben.

collection.find({}).exec((err, result) => { 
    if (err) { 
    console.log(err); 
    return; 
    } 
    if (result.length > 0) { 
    // We check that the length is > 0 because using .find() will always 
    // return an array, even an empty one. So just checking if it exists 
    // will yield a false positive 
    res.send(result); 
    // Could also just use `return result;` 
}); 
Verwandte Themen