aggregation framework - Display all data in a row using mongodb -
i have collection mycollection,
id datetime myid cost flag 1 '2016-07-01t00:00:00' 2048 1 'o' 2 '2016-07-02t00:00:00' 2049 2 'o'
if write sql query it
"select datetime, myid,flag, min(cost) mycollection group datetime, myid"
it display fields in data e.g
datetime, myid,flag, min(cost)
but in mongo aggregation framework can group
db.mycollection.aggregate([ { $group: { _id: { datetime: '$datetime', myid: '$myid' }, mincost: { $min: '$cost' } } } ])
which return me
datetime, myid, min(cost)
but need "flag"
field in single query. tried out $push
works array.
in sql server, query
select datetime, myid,flag, min(cost) mycollection group datetime, myid
is invalid in select list because column flag
not contained in either aggregate function or group clause.
in mongodb, able include field flag
in aggregate query, must apply accumulator operator on field , in case may either use $first
or $last
accumulator operators return field value within aggregation.
db.mycollection.aggregate([ { "$group": { "_id": { "datetime": '$datetime', "myid": '$myid' }, "mincost": { "$min": '$cost' }, "flag": { "$first": '$flag' } } } ])
in above, $first
accumulator operator applied on flag field return flag
value first document each group. order defined if documents in defined order.
Comments
Post a Comment