MongoDB:如何从集合中找到第n个最高工资
我需要从员工集合中找到mongodb中第n个最高工资。 如果有人能给我一个在mongodb中应用连接的想法,那也会很有帮助。试试这个: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
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
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)中使用