Search code examples
monk

how to use mongodb query option in monk nodejs


I have a collection name projects and I am trying to retrieve everything except its url like this query

db.projects.find({name:"arisha"},{url:0}).pretty()

This query is working perfectly and returning everything except url but my question is how to achieve this in Node module for MongoDB name monk.

I am using this code but its not working and returning every field:

var projs = db.get('projects');
projs.find({creator : req.session.user._id},{url:0}, function (err,data) {
    console.log(data);                                                    
    if(!err) {                                                            
        res.locals.projs = data;
        console.log(data);                                          
        res.render("projects.ejs",{title: "Projects | Bridge"});          
    }                                                                     
});     

I did not get where the problem is, please help and thanks in advance :)

Sample document:

{
    "name" : "arisha",
    "date" : {
        "day" : 18,
        "month" : 4,
        "year" : 2015
    },
    "creator" : "552edb6f8617322203701ad1",
    "url" : "EyjPdYoW",
    "members" : [
        "552edb6f8617322203701ad1"
    ],
    "_id" : ObjectId("5532994ba8ffdca31258bd1a")
}

Solution

  • To exclude the url field in monk, try the following syntax:

    var db = require('monk')('localhost/mydb');
    var projs = db.get('projects');
    
    projs.find({ creator : req.session.user._id }, "-url", function (err, data) {
      // exclude url field
    });
    

    EDIT:

    To exclude multiple fields, use the following projection syntax:

    projs.find({ creator : req.session.user._id }, { fields: { url: 0, creator: 0 } }, function(err, data) {      
       // exclude the fields url and creator
    });
    

    Alternatively (as you had discovered), you could also do:

    projs.find({ creator : req.session.user._id }, "-url -creator", function (err, data) {
          // exclude url and creator fields
    });