MongoDB:如何从收款中找到第n高的工资

  • 本文关键字:MongoDB mongodb mongodb-query
  • 更新时间 :
  • 英文 :


我需要在Employees集合的mongodb中找到第n个最高工资。如果有人能给我一个在mongodb中应用联接的想法,那也会非常有帮助。

这应该能在中工作

db.Employees.find({}).sort({"Emp salary":-1}).limit(1) //for first highest salary
db.Employees.find({}).sort({"Emp salary":-1}).skip(1).limit(1) // for second highest salary

类似地,您可以执行db.Employees.find({}).sort({"Emp salary":-1}).skip(nthVarible - 1).limit(1)

试试这个:

    db.salary.find({}).sort({s:-1}).skip(1).limit(1);

对于您的第二个需求,MongoDB是noSQL数据库,而不是跨国数据库。它不支持联接。

我找到了一个两步走的过程。如果有多个记录的工资与最高工资相同,它将在这种情况下工作。

我拥有的记录

{ "_id" : ObjectId("5cc04b02536dc2e493697b4e"), "name" : "Ankit" }
{ "_id" : ObjectId("5cc0504a536dc2e493697b50"), "name" : "Ankit", "salary" : 1000, "email" : "a@b.com", "joining_date" : ISODate("2019-04-24T12:02:18.528Z") }
{ "_id" : ObjectId("5cc0504a536dc2e493697b51"), "name" : "Priya", "salary" : 1300, "email" : "p@b.com", "joining_date" : ISODate("2019-04-24T12:02:18.528Z") }
{ "_id" : ObjectId("5cc0504a536dc2e493697b52"), "name" : "Raj", "salary" : 1200, "email" : "rj@b.com", "joining_date" : ISODate("2019-04-24T12:02:18.528Z") }
{ "_id" : ObjectId("5cc0504a536dc2e493697b53"), "name" : "Vishu", "salary" : 1500, "email" : "v@b.com", "joining_date" : ISODate("2019-04-24T12:02:18.528Z") }
{ "_id" : ObjectId("5cc0504a536dc2e493697b54"), "name" : "Rahul", "salary" : 2000, "email" : "ra@b.com", "joining_date" : ISODate("2019-04-24T12:02:18.528Z") }
{ "_id" : ObjectId("5cc08b5d536dc2e493697b57"), "name" : "Tushar", "salary" : 2000, "email" : "tu@b.com", "joining_date" : ISODate("2019-04-24T16:14:21.061Z") }

查找不同的工资并存储在变量中

sal = db.employee.distinct("salary").sort()

输出:[ 1000, 1200, 1300, 1500, 2000 ]

你可以从这个数组中获得第二高的薪水。以下查询将为您提供该工资的记录

db.employee.find({salary:{$lt:sal[sal.length-1]}}).sort({"salary":-1}).limit(1)

输出:

{ "_id" : ObjectId("5cc0504a536dc2e493697b53"), "name" : "Vishu", "salary" : 1500, "email" : "v@b.com", "joining_date" : ISODate("2019-04-24T12:02:18.528Z") }

我看到这个问题在许多技术采访中都被问过。

  • OBJ = client.my_db.employee_table

  • OBJ.find({}).sort('salary', -1).limit(1)

  • 索引1中的1表示升序

  • -索引1中的1表示降序。由于我们想从表中找到最高的薪水,我们必须提到-1。

查找表中第n个最高工资。

  • OBJ.find({}).sort('salary',-1).skip(n-1).limit(1)

为了消除行,我们在Mysql/SQL中使用OFFSET。同样,我们必须在MongoDB中使用skip((

如果在Mongodb中有多条记录,则为第一、第二个最高工资:

方法一:(如果不存在多个记录(

CCD_ 6==>第一高薪

CCD_ 7==>第二高薪

方法二:(如果存在多个记录( 第二高薪:

CCD_ 8==>sal=【1000、1400、1500、1700、2000】

db.details.find({salary:{$lt:sal[sal.length-1]}}).sort({"salary":-1}).limit(1)

db.sales.aggregate({$group:{_id:'$salary'}},{$sort:{salary:-1}},{$skip: 1},{$limit:1})

在$skip值中,可以使用n个数字跳过n行。

最新更新