2017-05-08 1 views
0

(기본) 키가 아닌 배열 색인을 기반으로 한 모음에서 두 개의 배열을 결합하고 싶습니다.MongoDB 3.2 : 배열 색인을 기반으로 두 배열 결합

는 데이터는 다음과 같습니다

{"_id" : ObjectId("1"), 
    "clicks" : { 
     "cumulative" : { 
      "data" : [ 
       3, 
       7, 
       8 
      ] 
     }, 
     "daily" : { 
      "data" : [ 
       3, 
       4, 
       1 
      ] 
     } 
    }, 
    "websiteId" : "abcdef" 
    "day" : { 
     "isoDate" : [ 
      ISODate("2016-07-07T02:00:00.000+02:00"), 
      ISODate("2016-07-08T02:00:00.000+02:00"), 
      ISODate("2016-07-09T02:00:00.000+02:00") 
      ]} 
    }, 
.... 

나는 각 배열의 인덱스를 기반으로 clicks.cumulative.data와 day.isoDate에 가입하고 싶습니다. 표는 다음과 같아야합니다

ObjectID Date   Clicks 
    1   2016-07-07 3 
    1   2016-07-08 7 
    1   2016-07-09 8 

내가 지금까지 시도하는 것 :

db.collection1.aggregate([ 
    {$unwind: "$day.isoDate"}, 
    {$match: {"websiteId": "abcdef"} 
    } 
    , 
    {$group: {_id: "$day.isoDate.Value"}} 
    ]) 

아무도 제안이 있습니까?

답변

1

이것은 풀리고 배열의 인덱스를 저장하여 MongoDB을 알리는 다음 투영 내에 사용함으로써 달성 될 수

db.test.aggregate([ 
    {"$unwind": { 
     path: "$day.isoDate", 
     includeArrayIndex: "index" 
    }}, 
    {"$project": { 
     "Date" : "$day.isoDate", 
     "Clicks": { 
      "$arrayElemAt" : [ 
       "$clicks.cumulative.data", 
       "$index" 
      ] 
     }} 
    }]) 

이가 출력 매력 같이

{ "_id" : ObjectId("5910de2e92842f684b605965"), "Date" : ISODate("2016-07-07T00:00:00Z"), "Clicks" : 3 } 
{ "_id" : ObjectId("5910de2e92842f684b605965"), "Date" : ISODate("2016-07-08T00:00:00Z"), "Clicks" : 7 } 
{ "_id" : ObjectId("5910de2e92842f684b605965"), "Date" : ISODate("2016-07-09T00:00:00Z"), "Clicks" : 8 } 
> 
+0

서지! 고맙습니다. –