MongoDB interview questions set 1


 

1)How to find the second highest salary ?

var records=[
    {salary:100 .  
 ..m,
00},
    {salary:9000},
    {salary:9000},
    {salary:5000},
    {salary:10000},
    ]
let counts = await _db.collection("salary").insertMany(records)
Ans:

Solution 1

let highest = await _db.collection("salary").find().sort({salary:-1}).limit(1).toArray();
let secondhighest = await _db.collection("salary").find({salary:{$lt:counts[0].salary}}).sort({salary:-1}).limit(1).toArray();
Solution 2:

step:1

var sal = await _db.collection("salary").distinct("salary")

output:[

  5000,

  9000,

  10000,

]

step:2

9000 is the second-highest salary
 


2)How to find if the query for finding records uses an index or not?

    let highest = await _db.collection("salaryy").find({itd:{$gte:0}}).sort({salary:-1}).explain('executionStats');


explain query will give all details like execution time etc.
Inside queryPlanner.winningPlan.inputStage.STAGE 
If STAGE="COLLSCAN" i.e no index used.
Id STAGE="IXSCAN" index is used.


3)What is the facet in MongoDB?
The $facet stage allows you to create multi-faceted aggregations which characterize data across multiple dimensions, or facets, within a single aggregation stage. Multi-faceted aggregations provide multiple filters and categorizations to guide data browsing and analysis. Retailers commonly use faceting to narrow search results by creating filters on product price, manufacturer, size, etc.

This means we can create different buckets of data from the same collection.



        let matching = await _db.collection("salary")
            .aggregate(
                [
                    {
                        '$facet': {
                            metadata: [{ $count: "total" }],
                            data: [
                                { $sort: sortOrder },
                                { $skip: parseInt(_page.size) * parseInt(_page.pageNumber - 1) },
                                { $limit: parseInt(_page.size) },
                                {
                                    $project: {
                                        _id: 0, msg: 0, error: 0
                                    },
                                },
                            ]
                        }
                    }
                ]).toArray();
Here metadata is one set that has a count of full documents and in the data field, we have different data sets.
What we can do through facet is, take the same set of documents and represent them from various dimensions like seller and discount.


Comments

Popular posts from this blog

Node JS:Understanding bin in package.json.

Node.js: create an excel file with multiple tabs.

Node.js: Downloading a xml file from given url and reading its data elements.