MongoDB:如何从集合中找到第n个最高工资

MongoDB:如何从集合中找到第n个最高工资,mongodb,mongodb-query,Mongodb,Mongodb Query,我需要从员工集合中找到mongodb中第n个最高工资。 如果有人能给我一个在mongodb中应用连接的想法,那也会很有帮助。试试这个: db.salary.find({}).sort({s:-1}).skip(1).limit(1); 对于第二个需求,MongoDB是noSQL数据库,而不是跨国数据库。它不支持连接 这应该行得通 db.Employees.find({}).sort({"Emp salary":-1}).limit(1) //for first highest sala

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

试试这个:

    db.salary.find({}).sort({s:-1}).skip(1).limit(1);
对于第二个需求,MongoDB是noSQL数据库,而不是跨国数据库。它不支持连接

这应该行得通

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(nthVariable-1).limit(1)

我找到了一个分为两步的过程。如果有多个记录的薪资与最高薪资相同,则在该场景中它将起作用

我有记录

{ "_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()
查找不同的薪资并存储在变量中

{ "_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\u db.employee\u表

  • 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()

@user4408375如果前两名员工的工资相同怎么办。如果是第二高的薪水,@Aabid,我已经添加了一个答案。虽然我使用了两步流程,但可能会有所帮助。db.salary.find({}).sort(s:-1).skip(1).limit(1);{}不应在排序(“s”,-1)中使用