Vote count: 0
I am newbie to mongodb. I am trying to convert following sql query to mongodb query.
select ename,sal,comm from emp where comm > (sal*1.10);
and below is what I have tried so far.
-
db.emp.aggregate([ {$match: {COMM: {$exists: true}}}, { $project: { ENAME : 1, SAL : 1, COMM :1, 'CALSAL' : { $multiply : [ '$SAL', 1.10 ]}}} ,{$match : {'CALSAL' : {$gt : '$COMM'}}}]);
-
db.emp.aggregate([ {$match: {COMM: {$exists: true}}}, { $project: { ENAME : 1, SAL : 1, COMM :1, 'CALSAL' : { $multiply : [ '$SAL', 1.10 ]}}} ,{$match : { '$COMM' : {$gt : 'CALSAL'} }}]);
-
db.emp.aggregate([ {$match: {COMM: {$exists: true}}}, { $project: { ENAME : 1, SAL : 1, COMM :1, 'CALSAL' : { $multiply : [ '$SAL', 1.10 ]}, cmp_value: {$cmp: ['$COMM', 'CALSAL']} } ,{$match : { cmp_value : {$gt : 0} }}]);
any help would be appreciated.
Thanks in advance.
1 Answer
Vote count: 0
After lot of efforts I got two ways to solve above problem.
-
db.emp.find({COMM: {$exists: true}, $where: "this.COMM > (this.SAL * 1.10)"},{ENAME : 1, SAL : 1, COMM :1});
-
db.emp.aggregate([ {$match: {COMM: {$exists: true}}}, { $project: { ENAME : 1, SAL : 1, COMM :1, 'CALSAL' : { $multiply : [ '$SAL', 1.10 ]} } }, { $project: { ENAME : 1, SAL : 1, COMM :1, cmp_value: {$cmp: ['$COMM', '$CALSAL']} }} ,{$match : { cmp_value : 1} } ]);
How to compare calculated field vs collection field in MongoDB?
Aucun commentaire:
Enregistrer un commentaire