我需要在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行。