user
user

Reputation: 395

Find all subdocuments that match with node.js mongodb

I currently have a schema which looks like:

var User = new Schema({
    id: String,
    firstName: String,
    lastName: String,
    password: String,
    username: String,
    position: [{
          title: String,
          location: String,
          start: String,
          term:Number,
          description:String,
                    date: {type: Date, default: Date.now}
  }]

});

I have two users, each with two embedded position documents.

user1:

"position" : [ 
    {
        "title" : "Business Analyst",
        "location" : "Dublin",
        "start" : "May 2017",
        "term" : 6,
        "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi",
        "_id" : ObjectId("58d6b7e11e793c9a506ffe0f")
    }, 
    {
        "description" : "description",
        "term" : 12,
        "start" : "may 2018",
        "location" : "Dublin",
        "title" : "Web Developer",
        "_id" : ObjectId("58d6af99e4318f4703ceb2af")
    }
],

user2:

"position" : [ 
    {
        "title" : "Software Engineer",
        "location" : "Cork",
        "start" : "May 2017",
        "term" : 9,
        "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in miorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi"

    }, 
    {
        "title" : "Web Developer",
        "location" : "Waterford",
        "start" : "May 2017",
        "term" : 6,
        "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi"
    }
],

However, if I search for 'Web Developer', I can only seem to return the first user (I understand why the entire document returns) but can I do a search and get all of the subdocuments that match the string 'Web Developer'? I'm using Ajax and my post query is as follows:

    app.post('/search', function (req, res) {

  User.find({'position.title':req.body.position}).exec(function (err, result) {
    res.send({ results: result });
});
});

Returned object :

enter image description here

Upvotes: 0

Views: 69

Answers (1)

Kxng Kombian
Kxng Kombian

Reputation: 467

In order to return only the sub document you have to pass the field as a second parameter to the .find function.

var position = new RegExp(req.body.position, 'i');

User.find({'position.title': position}, 'position.$')
.exec(function (err, result) {
});

Upvotes: 1

Related Questions