MongoDB:如何从收藏中找到第n个最高薪水

时间:2015-09-28 11:38:06

标签: mongodb mongodb-query

我需要从Employees系列中找到mongodb中第n个最高薪水。 如果有人可以想出在mongodb中应用连接的想法,也会非常有用。

4 个答案:

答案 0 :(得分:5)

这应该有效

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)

答案 1 :(得分:3)

试试这个:

<?php

      {//php code: query, results processed in while loop}

/////////// format, make, and populate table 1 /////////////
$tablevar = '';
$tablevar .="//jquery mobile stylesheets, customstyles.css, opening <page div>, <content div>//
$tablevar .= "<table class='common-tables'>";
$tablevar .= "<caption >$caption_variable</caption>";
$tablevar .= "<thead><TR>
<TH align ='left' >HeadA</TH>
<TH align ='left'>HeadB</TH>

</TR></thead>";
$tablevar .= "

<TR>
<TH>Type1</th>
<TD>{$variable}</TD>
<TD>{$variable1}</TD>
</TR>

<TR>
<TH>Type2</TH>
<TD>{$variable2}</TD>
<TD>{$variable3}</TD>
</TR>";


$tablevar .= "</TABLE>
    </div><!-- /content -->
    <div data-role='footer'>
        <h4>footer text</h4>
    </div><!-- /footer -->
</div><!-- /page -->

</body>
</html>";
} //end of while loop
echo "$tablevar";
?>

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

答案 2 :(得分:0)

我发现分两步进行。如果存在多条薪水最高的记录,它将在该方案中起作用。

我拥有的记录

{ "_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") }

答案 3 :(得分:0)

我看到很多技术面试都问过这个问题。

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