chris123
chris123

Reputation: 15

Mongodb Aggregation match by id and group

Hi ive created a database in mongodb and have created inserts im currently just learning how to use aggregation and i am struggling a little bit with it and was looking for some help as to why my command wont return any results. Here are the inserts:

db.transaction.insert({"EmpId":"005","transaction":[{"TID":"O02","Date":"3/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Steam Gift Card","amount":25}], "Total" : "84.99"});
db.transaction.insert({"EmpId":"001","transaction":[{"TID":"O03","Date":"3/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Playstation Controller","amount":25}], "Total" : "84.99"});
db.transaction.insert({"EmpId":"003","transaction":[{"TID":"O04","Date":"3/27/2017","product":[{"product_name":"Unchartered 2","quantity":1,"amount":49.99}]}], "Total" : "49.99"});
db.transaction.insert({"EmpId":"003","transaction":[{"TID":"O05","Date":"3/27/2017","product":[{"product_name":"Playstation 4","quantity":1,"amount":359.99}]},{"product_name":"Battlefield 2","amount":49.99}], "Total" : "409.98"});
db.transaction.insert({"EmpId":"004","transaction":[{"TID":"O06","Date":"4/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Steam Gift Card","amount":50}], "Total" : "109.99"});
db.transaction.insert({"EmpId":"001","transaction":[{"TID":"O07","Date":"4/27/2017","product":[{"product_name":"CSGO","quantity":1,"amount":13.99}]},{"product_name":"GTA4","amount": 39.99}], "Total" : "53.98"});
db.transaction.insert({"EmpId":"002","transaction":[{"TID":"O08","Date":"5/27/2017","product":[{"product_name":"Sparta","quantity":3,"amount":17.99}]},{"product_name":"Action Figures","amount": 9.99}], "Total" : "63.96"});
db.transaction.insert({"EmpId":"005","transaction":[{"TID":"O09","Date":"3/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Steam Gift Card","amount":25}], "Total" : "84.99"});
db.transaction.insert({"EmpId":"002","transaction":[{"TID":"O10","Date":"5/27/2017","product":[{"product_name":"Playstation Headset","quantity":3,"amount":29.99}]},{"product_name":"GTA 4","amount": 39.99},{"product_name":"Unchartered 2","amount": 49.99}], "Total" : "119.97"});
db.transaction.insert({"EmpId":"004","transaction":[{"TID":"O11","Date":"5/27/2017","product":[{"product_name":"Harry Potter","quantity":2,"amount":12.99}]},{"product_name":"Lord Of The Ring's","amount": 9.99}], "Total" : "35.97"});

Here is my query:

db.transaction.aggregate([{ $match: {EmpId: "001"}}, { $group: {_id: "EmpId", total: {$sum: "Total"}}}])

Here is the result:

{ "_id" : "EmpId", "total" : 0 }

Upvotes: 0

Views: 1778

Answers (1)

Shivaji Varma
Shivaji Varma

Reputation: 682

Firstly please make "Total" value a number instead of string, otherwise sum will not work.

db.transaction.insert({"EmpId":"005","transaction":[{"TID":"O02","Date":"3/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Steam Gift Card","amount":25}], "Total" : 84.99});
db.transaction.insert({"EmpId":"001","transaction":[{"TID":"O03","Date":"3/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Playstation Controller","amount":25}], "Total" : 84.99});
db.transaction.insert({"EmpId":"003","transaction":[{"TID":"O04","Date":"3/27/2017","product":[{"product_name":"Unchartered 2","quantity":1,"amount":49.99}]}], "Total" : 49.99});
db.transaction.insert({"EmpId":"003","transaction":[{"TID":"O05","Date":"3/27/2017","product":[{"product_name":"Playstation 4","quantity":1,"amount":359.99}]},{"product_name":"Battlefield 2","amount":49.99}], "Total" : 409.98});
db.transaction.insert({"EmpId":"004","transaction":[{"TID":"O06","Date":"4/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Steam Gift Card","amount":50}], "Total" : 109.99});
db.transaction.insert({"EmpId":"001","transaction":[{"TID":"O07","Date":"4/27/2017","product":[{"product_name":"CSGO","quantity":1,"amount":13.99}]},{"product_name":"GTA4","amount": 39.99}], "Total" : 53.98});
db.transaction.insert({"EmpId":"002","transaction":[{"TID":"O08","Date":"5/27/2017","product":[{"product_name":"Sparta","quantity":3,"amount":17.99}]},{"product_name":"Action Figures","amount": 9.99}], "Total" : 63.96});
db.transaction.insert({"EmpId":"005","transaction":[{"TID":"O09","Date":"3/27/2017","product":[{"product_name":"COD","quantity":1,"amount":59.99}]},{"product_name":"Steam Gift Card","amount":25}], "Total" : 84.99});
db.transaction.insert({"EmpId":"002","transaction":[{"TID":"O10","Date":"5/27/2017","product":[{"product_name":"Playstation Headset","quantity":3,"amount":29.99}]},{"product_name":"GTA 4","amount": 39.99},{"product_name":"Unchartered 2","amount": 49.99}], "Total" : 119.97});
db.transaction.insert({"EmpId":"004","transaction":[{"TID":"O11","Date":"5/27/2017","product":[{"product_name":"Harry Potter","quantity":2,"amount":12.99}]},{"product_name":"Lord Of The Ring's","amount": 9.99}], "Total" : 35.97});

Use '$' symbol before field name instead group query

db.transaction.aggregate([{ $match: {"EmpId": "001"}}, { $group: {_id: "$EmpId", total: {$sum: "$Total"}}}])

Here is the result:

{
    "_id" : "001",
    "total" : 138.97
}

Upvotes: 1

Related Questions