JavaScript Mongodb:打印收入高于所有雇员平均工资的雇员姓名

时间:2018-11-28 01:47:33

标签: javascript mongodb

我试图获取所有员工的平均薪水,然后将其与集合中所有员工的薪水进行比较,最后打印出薪水高于平均薪水的员工姓名。

但是我必须在mongodb中使用javascript。

我尝试了这一点,但能够获得结果,但是我使用了Aggregation框架,但是我想学习如何在Mongodb中使用JavaScript

db.emps.aggregate( [  {$group: {_id: "Ename", avgSal: {$avg: "$Sal"}  }}])
{ "_id" : "Ename", "avgSal" : 17060 }

var avgSal = 17060
db.emps.find( {Sal: {$gt: avgSal}}, {_id:0, Ename:1})
{ "Ename" : "Joe" }
{ "Ename" : "Jose" }
{ "Ename" : "Brian" }
{ "Ename" : "Tom" }

这是我的收藏集的样子。

{ "_id" : ObjectId("5bea22e2599db4fa75aa6f3c"), "EID" : 2, "Ename" : "Jim", "Sal" : 14100 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f3d"), "EID" : 1, "Ename" : "Joe", "Sal" : 20000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f3e"), "EID" : 3, "Ename" : "Bob", "Sal" : 13500 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f3f"), "EID" : 4, "Ename" : "Amy", "Sal" : 12000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f40"), "EID" : 5, "Ename" : "George", "Sal" : 10000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f41"), "EID" : 6, "Ename" : "Kurt", "Sal" : 9000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f42"), "EID" : 7, "Ename" : "Saeed", "Sal" : 13000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f43"), "EID" : 8, "Ename" : "Jose", "Sal" : 40000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f44"), "EID" : 9, "Ename" : "Brian", "Sal" : 19000 }
{ "_id" : ObjectId("5bea22e2599db4fa75aa6f45"), "EID" : 10, "Ename" : "Tom", "Sal" : 20000 }

1 个答案:

答案 0 :(得分:0)

您必须触发两个查询。

  1. 第一个查询查询平均工资的人。
  2. 第二个查询来找出员工的工资是否超过平均工资

    DECLARE
        TYPE PL_TABLE_TYPE IS TABLE OF NUMBER;
        TYPE RT IS RECORD (ITEM  VARCHAR2(20), PL_TABLE PL_TABLE_TYPE);
        TYPE TT IS TABLE OF RT;
    
        MY_TAB TT := TT();
    BEGIN
    
        MY_TAB.EXTEND;
        MY_TAB(MY_TAB.LAST).ITEM := 'ABC';
        MY_TAB(MY_TAB.LAST).PL_TABLE := PL_TABLE_TYPE(40,42,33,46,48); 
        --> Why do you assign strings like '40' if you have a NUMBER data type?
    
        MY_TAB.EXTEND;
        MY_TAB(MY_TAB.LAST).ITEM := 'DEF';
        MY_TAB(MY_TAB.LAST).PL_TABLE := PL_TABLE_TYPE(60,62,64,66,68);
    
        FOR r IN MY_TAB.FIRST..MY_TAB.LAST LOOP
            DBMS_OUTPUT.PUT(MY_TAB(r).ITEM || ' ');
            FOR i IN MY_TAB(r).PL_TABLE.FIRST..MY_TAB(r).PL_TABLE.LAST LOOP
                DBMS_OUTPUT.PUT(MY_TAB(r).PL_TABLE(i) || ' ');
            END LOOP;
            DBMS_OUTPUT.NEW_LINE;
        END LOOP;
    
    END;
    

尝试上面的代码,也许会对您有所帮助