我需要从Employees系列中找到mongodb中第n个最高薪水。 如果有人可以想出在mongodb中应用连接的想法,也会非常有用。
答案 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。
在表格中查找工资第 n 位。
OBJ.find({}).sort('salary',-1).skip(n-1).limit(1)
为了消除行,我们在 MySQL/SQL 中使用 OFFSET 同样我们必须在 MongoDB 中使用 skip()