Search code examples
javascriptnode.jsmongodbiframemongoose

use mongoose model.find() to get all entries of only 1 field


I've tried to use different variation of model.find(), but none do what I want.

code below is what I'm working with, but it displays every single field, and I only want the "iframe" field.

app.get('/api/videos', function (req, res) {
    Video.find({}, function (err, docs) {
       res.json(docs);
    });
});

Code below does work and I only get the 'iframe' field, but it reverses the json output and I don't want that. It also get unique values, even though it's not that important since every entry is unique.

app.get('/api/videos', function (req, res) {
    Video.find().distinct('iframe', function (err, docs) {
        res.json(docs);
    });
});

W


Solution

  • What you are looking for is called projection:

    Video.find({}, {iframe: 1}, function (err, docs) {
       res.json(docs);
    });
    

    The second parameter to the find function tells which field to return. If you do not want the _id as well, then use: {_id:0, iframe:1}

    Like so:

    Video.find({}, {_id:0, iframe:1}, function (err, docs) {
       res.json(docs);
    });
    

    However, projection does not give you distinct values. It only returns the fields you want to use (along with repetitions).