2017-04-09 15 views
1

私はMongoDBにはかなり新しく、現在状況に直面しています。以下は、私が持っているデータベース全体から2つのサンプルレコードです:MongoDBの結果を入れ子にした配列

{ 
    "Country": "US", 
    "Years": [ 
     { 
      "Year": "2016", 
      "Links": [ "https://wikileaks.org/gifiles/docs/11/111533_-latam-centam-brief-110822-.html", 
      "https://wikileaks.org/plusd/cables/1979PANAMA06344_e.html", 
      "https://wikileaks.org/gifiles/docs/90/9058_wax-12312008-csv-.html" ] 
     }, 
     { 
      "Year": "2013", 
      "Links": [ ""https://wikileaks.org/gifiles/docs/11/111533_-latam-centam-brief-110822-.html", 
      "https://wikileaks.org/plusd/cables/1979PANAMA06344_e.html", 
      "https://wikileaks.org/gifiles/docs/90/9058_wax-12312008-csv-.html" ] 
     } 
    ] 
"Link_Count": 6 
} 
    { 
    "Country": "UK", 
    "Years": [ 
     { 
      "Year": "2009", 
      "Links": [ "https://wikileaks.org/gifiles/docs/11/111533_-latam-centam-brief-110822-.html", 
      "https://wikileaks.org/plusd/cables/1979PANAMA06344_e.html", 
      "https://wikileaks.org/gifiles/docs/90/9058_wax-12312008-csv-.html" ] 
     }, 
     { 
      "Year": "2011", 
      "Links": [ ""https://wikileaks.org/gifiles/docs/11/111533_-latam-centam-brief-110822-.html", 
      "https://wikileaks.org/plusd/cables/1979PANAMA06344_e.html"] 
     } 
    ] 
"Link_Count": 5 
} 

が、私はそれを集約しようとしましたが、I:基本的には

{ 
    "_id": 1, 
    "Record": 1, 
    "Link": [ "https://wikileaks.org/plusd/cables/1979PANAMA06344_e.html" ], 
    "Location": [ "USA", "PAN", "USA", "USA", "PAN" ], 
    "Organization": [ "GN", "SOUTHCOM", "UCMJ", "PRC" ], 
    "Date": [ "2016" ], 
    "People": [ "P.Walter" ] 
} 
{ 
    "_id": 2, 
    "Record": 2, 
    "Link": [ "https://wikileaks.org/gifiles/docs/11/111533_-latam-centam-brief-110822-.html" ], 
    "Location": [ "NIC", "GTM", "JAM", "GTM", "PAN" ], 
    "Organization": [ "CENTAM", "Calibre Mining Corporation", "STRATFOR", "Alder Resources" ], 
    "Date": [ "2013" ], 
    "People": [ "Daniel Ortega", "Hugo Chavez", "Paulo Gregoire" ] 
} 

が、私はこのような出力を取得しようとしています私が出力で与えたように私が望むものを達成することができませんでした。ここに私のクエリです:

db.test.aggregate([ 
{ 
"$unwind": "$Location" 
}, 
{ 
    "$group" : { 
     "_id": { 
      "Country": "$Location", 
      "Year": "$Date", 
      "Links": "$Link" 
     }, 
     Loc: { 
      $addToSet: "$Location" 
     } 
    } 
}, 
{ 
    "$unwind": "$Loc" 
}, 
{ 
    "$group": { 
     "_id": "$Loc", 
     "Years": { "$push": { 
      "Year": "$_id.Year", 
      "Links": "$_id.Links" 
      } 
     } 
    } 
} 
]).toArray() 

$場所内で見つかった重複があるので、私は$場所で$くつろぐ使用して$ addToSet。私はどんな提案や解決策も開いていますので、教えてください!前もって感謝します!

db.test.aggregate([{ 
    "$unwind": "$Location" 
}, { 
    "$unwind": "$Date" 
}, { 
    "$unwind": "$Link" 
}, { 
    "$group": { 
     "_id": { 
      "Country": "$Location", 
      "Year": "$Date" 
     }, 
     Links: { 
      $addToSet: "$Link" 
     } 
    } 
}, { 
    "$group": { 
     "_id": "$_id.Country", 
     Years: { 
      $push: { 
       "Year": "$_id.Year", 
       "Links": "$Links" 
      } 
     }, 
     Link_Count: { $sum: { $size: "$Links" } } 
    } 
}]) 

考え方は新しい配列に$pushリンクのことができるようにするためにすべてのアレイ$unwindにあり、そして最後の$groupのステージのために$sizeでグループ化されたレコードをカウントする:

答えて

0

あなたが使用することができます。

+0

こんにちは、ありがとうございました!私は上記のクエリを使用して出力を得ることができました。しかし、リンク上で$ addToSetを使用することが可能かどうかをさらに質問したいと思います。これは、上記のクエリが私に複製を与えたので、ユニークなリンクのみを取得したいからです。私は本当にあなたの助けに感謝し、あまりにもあなたを悩ませるために前もって申し訳ありません! – Levi0000

+0

更新された答えを見て、 'Years.Links'配列に一意の値を取得し、' Link_Count'に国の一意の 'Links'値の数 –

関連する問題