[SERVER-16462] Can't access specific array elements in $group Created: 08/Dec/14  Updated: 08/Apr/15  Resolved: 08/Apr/15

Status: Closed
Project: Core Server
Component/s: Aggregation Framework
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Alexander Komyagin Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate
duplicates SERVER-4589 aggregation: need an array indexing ... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Participants:

 Description   

It seems not possible to access a specific array element in the $group stage. For instance, let's say my documents have 2 arrays, I want to unwind the first array and group by the campaign_id and day pair. I also want to access a certain array element for some reason, but I can not.

mongos> db.test.find()
{ "_id" : ObjectId("548608660094d27682c03666"), "campaign_id" : 1, "channel1" : [ { "day" : 0, "delivered" : 10 }, { "day" : 1, "delivered" : 1 } ], "channel2" : [ { "day" : 0, "delivered" : 5 }, { "day" : 1, "delivered" : 6 } ] }
{ "_id" : ObjectId("548608a20094d27682c03667"), "campaign_id" : 2, "channel1" : [ { "day" : 0, "delivered" : 1 }, { "day" : 1, "delivered" : 1 } ], "channel2" : [ { "day" : 0, "delivered" : 5 }, { "day" : 1, "delivered" : 5 } ], "channel3" : [ { "day" : 0, "delivered" : 11 }, { "day" : 1, "delivered" : 1 } ] }

mongos> db.test.aggregate({$unwind : "$channel1"},{$group : {_id : {campaign_id : "$campaign_id", day : "$channel1.day"}, xxx: {$first : "$channel2"} }})
{ "_id" : { "campaign_id" : 2, "day" : 1 }, "xxx" : [ { "day" : 0, "delivered" : 5 }, { "day" : 1, "delivered" : 5 } ] }
{ "_id" : { "campaign_id" : 1, "day" : 1 }, "xxx" : [ { "day" : 0, "delivered" : 5 }, { "day" : 1, "delivered" : 6 } ] }
{ "_id" : { "campaign_id" : 2, "day" : 0 }, "xxx" : [ { "day" : 0, "delivered" : 5 }, { "day" : 1, "delivered" : 5 } ] }
{ "_id" : { "campaign_id" : 1, "day" : 0 }, "xxx" : [ { "day" : 0, "delivered" : 5 }, { "day" : 1, "delivered" : 6 } ] }
mongos> db.test.aggregate({$unwind : "$channel1"},{$group : {_id : {campaign_id : "$campaign_id", day : "$channel1.day"}, xxx: {$first : "$channel2.0.day"} }})
{ "_id" : { "campaign_id" : 2, "day" : 1 }, "xxx" : [ ] }
{ "_id" : { "campaign_id" : 1, "day" : 1 }, "xxx" : [ ] }
{ "_id" : { "campaign_id" : 2, "day" : 0 }, "xxx" : [ ] }
{ "_id" : { "campaign_id" : 1, "day" : 0 }, "xxx" : [ ] }
mongos> db.test.aggregate({$unwind : "$channel1"},{$group : {_id : {campaign_id : "$campaign_id", day : "$channel1.day"}, xxx: {$first : "$channel2.0"} }})
{ "_id" : { "campaign_id" : 2, "day" : 1 }, "xxx" : [ ] }
{ "_id" : { "campaign_id" : 1, "day" : 1 }, "xxx" : [ ] }
{ "_id" : { "campaign_id" : 2, "day" : 0 }, "xxx" : [ ] }
{ "_id" : { "campaign_id" : 1, "day" : 0 }, "xxx" : [ ] }
mongos> db.test.aggregate({$unwind : "$channel1"},{$group : {_id : {campaign_id : "$campaign_id", day : "$channel1.day"}, xxx: {$first : "$channel2[0]"} }})
{ "_id" : { "campaign_id" : 2, "day" : 1 }, "xxx" : null }
{ "_id" : { "campaign_id" : 1, "day" : 1 }, "xxx" : null }
{ "_id" : { "campaign_id" : 2, "day" : 0 }, "xxx" : null }
{ "_id" : { "campaign_id" : 1, "day" : 0 }, "xxx" : null }



 Comments   
Comment by Asya Kamsky [ 08/Apr/15 ]

Dup of SERVER-4589 ability to extract a single element of array by index (of type of element)

Comment by Roland Bouman [ 29/Dec/14 ]

Looks like this may be the same issue as https://jira.mongodb.org/browse/SERVER-4589

Generated at Thu Feb 08 03:41:07 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.