HomerPlata
HomerPlata

Reputation: 1787

Show entire MongoDB contents in Node.js API

First off, don't worry, it's a tiny data set - I realise it wouldn't be wise to dump an entire production DB to a single screen via an API... I just need to get a JSON dump of entire (small) DB to return via an API endpoint in a Node.js application.

My application does successfully return single records with this code:

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 I know Node is talking to Mongo successfully, but how can I tweak this query/code to basically return what you get when you execute the following on the MongoDB command line:

$ db.results.find()

Upvotes: 0

Views: 76

Answers (3)

HomerPlata
HomerPlata

Reputation: 1787

Thanks guys, I appreciate your answers pointing me in the right direction, in terms of using {} as the query. Here is the code that eventually worked for me:

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

The crucial element being the toArray(...) part.

Upvotes: 0

William Carron
William Carron

Reputation: 410

Exactly as you've described it.

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;`
});

Upvotes: 1

Remario
Remario

Reputation: 3863

This is snippet.

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

First use your predefined model and call find. the logic is to place a empty object {} essentially rendering . select all from this model.

Make sense?

Upvotes: 2

Related Questions