2016-10-22 10 views
2

MongoDB集約を使用しました。ソートと制限を使用しようとすると、重複レコードが取得されます。mongodb集約によるデータ複製

下記のように、私は3つのドキュメントを持っており、document1document2は同じタイトルを持ち、document3は異なるビデオタイトルを持っています。

ドキュメントをタイトルでグループ化し、グループ化されたドキュメントを降順でシリアルエピソードで並べ替える必要があります。

document1document2は、同じグループになり、独自の文書2を取得し、今私はvideo_view_countこのdocument2document3を並べ替えることになるでしょう。

/* document1 */ 
{ 
    "_id" : ObjectId("580afd565706467c1bbabd70"), 
    "serial_episode" : "5", 
    "video_view_count" : 50.0, 
    "video_data" : [ 
     { 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text" : "", 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec3" 
     } 
    ] 
} 

/* document2 */ 
{ 
    "_id" : ObjectId("580afd565706467c1bbabd71"), 
    "serial_episode" : "6", 
    "video_view_count" : 10.0, 
    "video_data" : [ 
     { 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text" : "", 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca", 
      "language_id" : "578f1ec6e494f9400b21fec3" 
     } 
    ] 
} 

/* document3 */ 
{ 
    "_id" : ObjectId("580afd565706467c1bbabd72"), 
    "serial_episode" : "", 
    "video_view_count" : 11.0, 
    "video_data" : [ 
     { 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca123", 
      "language_id" : "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text" : "", 
      "video_categories" : [ 
       "Sport" 
      ], 
      "video_title" : "Zwyci??zca123", 
      "language_id" : "578f1ec6e494f9400b21fec3" 
     } 
    ] 
}   

Expexcted出力:

docuemnt1-2グループがuniqe document2を生成するために一緒にいるとdocuemnt2は、最新のエピソードを持っているので、私はdocument3、その後document2で結果が欲しいです。

/* document3 */ 
{ 
    "_id": ObjectId("580afd565706467c1bbabd72"), 
    "serial_episode": "", 
    "video_view_count": 11, 
    "video_data": [ 
     { 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca123", 
      "language_id": "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text": "", 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca123", 
      "language_id": "578f1ec6e494f9400b21fec3" 
     } 
    ] 
}, 
/* document3 */ 
{ 
    "_id": ObjectId("580afd565706467c1bbabd71"), 
    "serial_episode": "6", 
    "video_view_count": 10, 
    "video_data": [ 
     { 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca", 
      "language_id": "578f1ec6e494f9400b21fec4" 
     }, 
     { 
      "video_featured_text": "", 
      "video_categories": [ 
       "Sport" 
      ], 
      "video_title": "Zwyci??zca", 
      "language_id": "578f1ec6e494f9400b21fec3" 
     } 
    ] 
} 

現在の集約演算:

// Grouping that I have implemented 
var group = { 
    "$group": { 
     "_id":" $video_data.video_title", 
     "video_rating" : { $first:" $video_rating" }, 
     "serial_episode" : { $first: "$serial_episode" }, 
     "video_view_count": { $first: "$video_view_count" }, 
    } 
}; 

// Aggregate function to get that videos  
videos.aggregate([ 
    { $match: { "video_data.video_categories": query.category_name } }, 
    { $unwind: "$video_data" }, 
    { $sort: { video_view_count: -1 } }, 
    { $sort:{ serial_episode: -1 } }, 
    group, 
    { $sort:{ video_view_count: -1 } }, 
    { $skip: skipData }, 
    { $limit: 10 } 
], function(error, output){}); 
+0

サンプルの内容は何ですか?サンプルから期待される出力は何ですか?あなたはそれらの2つのことであなたの質問を更新できますか? – chridam

+0

はい、確かに、私は質問を更新しました。今すぐ確認してください –

+0

これらのサンプル文書を集約すると期待される結果は何ですか? – chridam

答えて

0

は、なぜあなたはそれを巻き戻している..?私はビデオビューのカウントにdocument2document3を比較する必要が アンワインドを削除すると、ドキュメントに配列の長さが掛けられます。

+0

私はオブジェクト配列のデータを持っているので、私は巻き戻している。以下のような {_id:1234655、 video_view_count:0 video_data:[ { VIDEO_TITLE: "こんにちは" }、 { VIDEO_TITLE: "HI" }] } –

+0

私はこの問題は、あなたのデータであると思います。 。ドキュメント1には、 "video_title"フィールドの使用がありません。$が存在します。 –

+1

あなたの質問から何を得ているのかを教えてください。 –