Janmejay
Janmejay

Reputation: 1053

Get desired output using mongoDB find

I have following documents in my collection

{
_id: ObjectId("5166fefbc482c31052000002"),
contact: [
    {
        home: 7735734105
    },
    {
        office: 9583866301
    }
],
user_name: "moti",
reportsTo: "bikram",
technology: [
    {
        name: ".net",
        rating: 5
    },
    {
        name: "JavaScript",
        rating: 2
    }
],
project: [
    "Agile School",
    "Draftmate"
],
type: "developer",
email: "[email protected]"

} and

{
_id: ObjectId("5166fe90c482c31052000001"),
contact: [
    {
        home: 7735734103
    },
    {
        office: 9583866901
    }
],
user_name: "ganesh",
reportsTo: "bikram",
technology: [
    {
        name: "JavaScript",
        rating: 3
    },
    {
        name: ".net",
        rating: 4
    }
],
project: [
    "SLBC",
    "Draftmate"
],
type: "developer",
email: "[email protected]"

}

Now I need to find the rating of the people who know only JavaScript.Currently if I run

db.users.find( { technology: { $elemMatch: { name: 'JavaScript' } } },{user_name:1,'technology.name':1,_id:0} ).pretty()

I am getting names of all technologies(.net & JavaScript) and their corresponding ratings. I need only user names,and their respective ratings in JavaScript only. Do I need to use any aggregation techniques?

Upvotes: 1

Views: 58

Answers (1)

James Wahlin
James Wahlin

Reputation: 2821

The positional operator '$' can be used to limit query results to the first matching element. To use in your query above you would change it to:

db.users.find( { technology: { $elemMatch: { name: 'JavaScript' } } },{user_name:1,'technology.$.name':1,_id:0} ) 

Upvotes: 2

Related Questions