結果のページ分割
MongoDB 6.0.13 + または7.0.5 + を実行している Atlas クラスターでは、 Atlas Search を使用して、 $search
クエリ結果を参照点の後、または前に順番に取得します。 $search
searchAfter
またはsearchBefore
オプションを使用して結果を順番に走査し、アプリケーション内に「次のページ」と「前のページ」関数を構築します。
使用法
ページ分割された結果を検索するには、次の手順を実行します。
クエリを実行したいフィールドにインデックスを作成します。
参照点を返す
$search
クエリを実行します。 詳しくは、「 参照点を取得する 」を参照してください。後続の
$search
クエリで参照点を使用して、結果内に次または前のドキュメント セットを検索します。"Next Page" 関数を構築するための結果の検索の詳細については、「特定の参照点の後の検索 」を参照してください。
「前のページ」関数を構築するための結果の検索の詳細については、「特定の参照点の前の検索 」を参照してください。
結果のページに移動するには、
$skip
と$limit
を$search
searchAfter
またはsearchBefore
オプションと組み合わせて使用します。 たとえば、ページ3からページ5に移動し、1 ページあたり10の結果に移動するには、次の操作を実行します。ページ3の最後の結果の参照点を持つ
searchAfter
を使用して結果を取得します(結果30 )。ページ4の10結果(結果31 - 40 )をスキップするには
$skip
を使用し、結果を10ドキュメントに制限するには、$limit
を使用します。ページ5の結果を返します(結果41 - 50 )。
ここで、
$skip
をsearchAfter
オプションとともに使用すると、クエリが最適化され、結果の 1 ページのみをスキップします(10件のドキュメント)。比較すると、$search
searchAfter
オプションを使用せずに$skip
を使用すると、クエリは結果の 4 ページ(40件のドキュメント)をスキップします。詳細については、「searchAfter と $skip を使用してページ 2 からページ 5 へジャンプする」をご覧ください。
Considerations
複数のドキュメントが同じ値を持つフィールドでソートすると、同順位となります。 MongoDB、関連付けられたクエリ結果の順序が保証されていないため、searchAfter
と searchBefore
を使用すると重複や不整合が発生する可能性があります。 決定的な検索動作を確保するには、次の原則を適用します。
関連性スコアが同値になるのを防ぐために、クエリを一意のフィールドでソートします。
非 一意のフィールドで主にソートする場合は、タイブレークとして機能するために一意のフィールドに セカンダリ ソート句を追加 します。
クエリ結果を不変フィールドでソートします。 Atlas Search は、最初のクエリと後続のクエリの間にコレクションに加えた更新を反映します。
updated_time
などの可変フィールドでソートし、最初と 2 番目のクエリの間にコレクションを更新すると、Atlas Search は同じドキュメントの順序付け方法が異なる場合があります。
不変または一意のフィールドでクエリ結果を並べ替える方法については、「 Atlas Search結果の並べ替え 」を参照してください。
検索ノードを配置した場合は、次の点を考慮してください。
検索ノード間で結果が異なる可能性があるため、
searchScore
で結果を並べ替えないでください。searchScore
を計算するには、ホストはその上に存在するすべてのドキュメントを考慮に入れます。その中には、削除済みのドキュメントでインデックスからはまだ削除されていないものも含まれます。削除は各ホストで個別に発生するため、クエリがどのホストでルーティングされるかに応じてsearchScore
が変動することがあります。
検索ノードで searchScore
に基づくソート時にページ分割をサポートするには、MongoDB フィードバックエンジンでこちらのリクエストに投票してください。
参照点の取得
特定の時点でクエリ結果を検索するには、 $search
クエリで参照点を指定する必要があります。 参照点を検索するには、 ステージの後の$meta
searchSequenceToken
$project
ステージで$search
キーワード を使用します。
構文
1 [{ 2 "$search": { 3 "index": "<index-name>", 4 "<operator-name>"|"<collector-name>": { 5 <operator-specification>|<collector-specification> 6 } 7 "sort": { 8 "score": { 9 "$meta": "searchScore", _id:1 10 } 11 } 12 ... 13 }, 14 { 15 "$project": { 16 { "paginationToken" : { "$meta" : "searchSequenceToken" } } 17 }, 18 ... 19 }]
出力
searchSequenceToken
は、結果内の各ドキュメントに対して base 64でエンコードされたトークンを生成します。 トークンの長さは、クエリのソートオプションで指定されたフィールドの数に応じて増加します。 トークンはデータベースのスナップショットには関連付けられていません。
クエリでsort
オプションを指定しない限り、結果内のドキュメントはデフォルトの順序でソートされます。 結果の並べ替えの詳細については、「 Atlas Search結果の並べ替え 」を参照してください。
特定の参照点の後の検索
参照点を検索するには、 searchSequenceToken
によって生成されたトークンでsearchAfter
オプションを使用して、 $search
クエリで参照点を指定する必要があります。 searchSequenceToken
によって生成されたトークンは、 searchSequenceToken
がトークンを生成した$search
クエリを再実行した場合にのみ使用できます。 トークンを使用する後続の$search
クエリのセマンティクス(検索フィールドと値)は、 searchSequenceToken
がトークンを生成したクエリと同一である必要があります。
searchAfter
オプションを使用して、アプリケーション内で「次のページ」機能を構築できます。 これを示すには、このページの例を参照してください。
searchAfter
構文
1 { 2 "$search": { 3 "index": "<index-name>", 4 "<operator-name>"|"<collector-name>": { 5 <operator-specification>|<collector-specification> 6 }, 7 "searchAfter": "<base64-encoded-token>", 8 "sort": { 9 "score": { 10 "$meta": "searchScore", _id:1 11 } 12 } 13 ... 14 }, 15 "$project": { 16 { "paginationToken" : { "$meta" : "searchSequenceToken" } } 17 }, 18 ... 19 }
出力
Atlas Search では、指定トークンの発行後に結果内のドキュメントが返されます。 Atlas Search では、 $search
ステージの後の$project
ステージでsearchSequenceToken
を指定したため、結果内のドキュメントの生成されたトークンが返されます( 11行に表示)。 これらのトークンは、同じセマンティクスを持つ別のクエリの参照ポイントとして使用できます。
クエリでsort
オプションを指定しない限り、結果内のドキュメントはデフォルトの順序でソートされます。 結果の並べ替えの詳細については、「 Atlas Search結果の並べ替え 」を参照してください。
特定の参照点の前の検索
参照点の前を検索するには、 searchSequenceToken
によって生成されたトークンでsearchBefore
オプションを使用して、 $search
クエリで参照点を指定する必要があります。 searchSequenceToken
によって生成されたトークンは、 searchSequenceToken
がトークンを生成した$search
クエリを再実行した場合にのみ使用できます。 トークンを使用する後続の$search
クエリのセマンティクス(検索フィールドと値)は、 searchSequenceToken
がトークンを生成したクエリと同一である必要があります。
searchBefore
オプションを使用して、アプリケーション内で「前のページ」機能を構築できます。 「前のページ」機能を構築するには、以下を組み合わせます。
これを証明するために、このページのsearchBefore
クエリ例を参照してください。
searchBefore
構文
1 { 2 "$search": { 3 "index": "<index-name>", 4 "<operator-name>"|"<collector-name>": { 5 <operator-specification>|<collector-specification> 6 }, 7 "searchBefore": "<base64-encoded-token>", 8 "sort": { 9 "score": { 10 "$meta": "searchScore", _id:1 11 } 12 } 13 ... 14 }, 15 "$project": { 16 { "paginationToken" : { "$meta" : "searchSequenceToken" } } 17 }, 18 ... 19 }
searchBefore
出力
Atlas Search では、指定されたトークンに先行する結果内のドキュメントが逆の順序で返されます。 Atlas Search では、searchSequenceToken
$project
$search
ステージの後の ステージで を指定したため、結果内のドキュメントの生成されたトークンも返されます(11 行に表示されているように)。これらのトークンは、同じセマンティクスを持つ別のクエリの参照ポイントとして使用できます。
例
次の例えでは、動的マッピングを持つdefault
という名前の Atlas Search インデックスがあるsample-mflix.moviesコレクションを使用します。 コレクションをロードしてインデックスを作成すると、コレクションに対して次のクエリを実行できます。
このクエリは参照点の検索方法を示しており、指定した参照点の前後で同じ検索期間の追加結果を取得するために、後続のクエリでこの参照点を使用します。
この例は、次のタスクを実行する方法を示します。
注意
デフォルトでは、Atlas Search は結果内のドキュメントを、ドキュメントの関連性スコアでソートします。 結果内の複数のドキュメントのスコアが同じである場合、Atlas Search は任意の順序付けられた結果を返します。 特定の順序でドキュメントを返すには、クエリで一意のフィールドreleased
を指定して結果をソートします。
サンプル クエリでは、次のパイプライン ステージを使用して最初のページの結果を取得し、後続のクエリのトークンまたは参照点を取得します。
結果を | |
ドキュメントの
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
[ { genres: [ 'Drama' ], title: "A Summer at Grandpa's", paginationToken: 'CKUdGgJgAA==', score: 2.262615203857422 }, { genres: [ 'Musical', 'Romance' ], title: 'Summer Stock', released: ISODate('1951-01-22T00:00:00.000Z'), paginationToken: 'CJsFGgkpAHw/0HT///8=', score: 3.000213623046875 }, { genres: [ 'Comedy', 'Romance' ], title: 'Smiles of a Summer Night', released: ISODate('1957-12-23T00:00:00.000Z'), paginationToken: 'CKIHGgkpAKDlpaf///8=', score: 2.0149309635162354 }, { genres: [ 'Drama' ], title: 'Violent Summer', released: ISODate('1959-11-13T00:00:00.000Z'), paginationToken: 'CI8JGgkpAJhJh7X///8=', score: 3.000213623046875 }, { genres: [ 'Drama', 'Romance' ], title: 'A Summer Place', released: ISODate('1959-11-18T00:00:00.000Z'), paginationToken: 'CLoJGgkpAGQJobX///8=', score: 2.579726457595825 }, { genres: [ 'Drama' ], title: 'The End of Summer', released: ISODate('1962-02-01T00:00:00.000Z'), paginationToken: 'CK0KGgkpAAzP18X///8=', score: 2.262615203857422 }, { genres: [ 'Drama', 'Romance' ], title: 'Summer and Smoke', released: ISODate('1962-04-01T00:00:00.000Z'), paginationToken: 'CMQKGgkpAECmB8f///8=', score: 2.579726457595825 }, { genres: [ 'Documentary', 'Sport' ], title: 'The Endless Summer', released: ISODate('1968-08-17T00:00:00.000Z'), paginationToken: 'CO4MGgkpAJjH5vX///8=', score: 2.579726457595825 }, { genres: [ 'Comedy', 'Drama', 'Romance' ], title: "Summer of '42", released: ISODate('1971-04-09T00:00:00.000Z'), paginationToken: 'CPQQGgkpAGRgUAkAAAA=', score: 2.579726457595825 }, { genres: [ 'Drama' ], title: 'That Certain Summer', released: ISODate('1972-11-01T00:00:00.000Z'), paginationToken: 'COwRGgkpAPQV0hQAAAA=', score: 2.579726457595825 } ]
追加の結果を検索するには、結果を検索したい時点より後の参照点を指定します。
サンプル クエリでは、次のパイプライン ステージを使用して、同じタームの前のクエリからsearchSequenceToken
によって生成されたトークンを使用して、2 ページの結果を検索します。
| |
結果を | |
ドキュメントの
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchAfter": "COwRGgkpAPQV0hQAAAA=", "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
[ { genres: [ 'Drama' ], title: 'Summer Wishes, Winter Dreams', released: ISODate('1974-09-09T00:00:00.000Z'), paginationToken: 'CMwSGgkpAECHcCIAAAA=', score: 2.262615203857422 }, { genres: [ 'Drama', 'Thriller' ], title: 'Shadows of a Hot Summer', released: ISODate('1978-09-01T00:00:00.000Z'), paginationToken: 'CPEVGgkpAGw/qz8AAAA=', score: 2.0149309635162354 }, { genres: [ 'Drama' ], title: 'Indian Summer', released: ISODate('1978-11-01T00:00:00.000Z'), paginationToken: 'CNYRGgkpAFhj5UAAAAA=', score: 3.000213623046875 }, { genres: [ 'Drama' ], title: 'Indian Summer', released: ISODate('1978-11-01T00:00:00.000Z'), paginationToken: 'CNsRGgkpAFhj5UAAAAA=', score: 3.000213623046875 }, { genres: [ 'Drama', 'Mystery' ], title: 'One Deadly Summer', released: ISODate('1983-05-11T00:00:00.000Z'), paginationToken: 'COwcGgkpAAjtIGIAAAA=', score: 2.579726457595825 }, { genres: [ 'Comedy' ], title: 'Summer Rental', released: ISODate('1985-08-09T00:00:00.000Z'), paginationToken: 'CL8fGgkpABTypHIAAAA=', score: 3.000213623046875 }, { genres: [ 'Drama', 'Romance' ], title: 'Summer', released: ISODate('1986-08-29T00:00:00.000Z'), paginationToken: 'CO0gGgkpAHCiY3oAAAA=', score: 3.5844719409942627 }, { genres: [ 'Drama', 'Thriller' ], title: 'Summer Camp Nightmare', released: ISODate('1987-04-17T00:00:00.000Z'), paginationToken: 'CNkiGgkpAHQ/CX8AAAA=', score: 2.579726457595825 }, { genres: [ 'Action', 'Crime', 'Drama' ], title: 'Cold Summer of 1953', released: ISODate('1988-06-01T00:00:00.000Z'), paginationToken: 'CNsjGgkpACjVTYcAAAA=', score: 2.262615203857422 }, { genres: [ 'Drama', 'War' ], title: 'That Summer of White Roses', released: ISODate('1989-07-11T00:00:00.000Z'), paginationToken: 'CI0mGgkpALSEc48AAAA=', score: 2.0149309635162354 } ]
以前の結果を検索するには、結果を検索したい時点より前の参照点を指定します。
このサンプル クエリでは、次のパイプライン ステージを使用して、前のクエリで同じタームのsearchSequenceToken
によって生成されたトークンを使用して、最初のページの 結果を返します。
| |
結果を | |
ドキュメントの
|
注意
デフォルトでは、参照点の前に結果を検索するためのトークンを指定するクエリに対して、Atlas Search は逆の順序で結果を返します。 ドキュメントを順番に返すには、クエリではtoArray()と JavaScript reverse()
メソッドが使用されます。
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchBefore": "CMwSGgkpAECHcCIAAAA=", "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ]).toArray().reverse()
[ { genres: [ 'Drama' ], title: "A Summer at Grandpa's", paginationToken: 'CKUdGgJgAA==', score: 2.262615203857422 }, { genres: [ 'Musical', 'Romance' ], title: 'Summer Stock', released: ISODate('1951-01-22T00:00:00.000Z'), paginationToken: 'CJsFGgkpAHw/0HT///8=', score: 3.000213623046875 }, { genres: [ 'Comedy', 'Romance' ], title: 'Smiles of a Summer Night', released: ISODate('1957-12-23T00:00:00.000Z'), paginationToken: 'CKIHGgkpAKDlpaf///8=', score: 2.0149309635162354 }, { genres: [ 'Drama' ], title: 'Violent Summer', released: ISODate('1959-11-13T00:00:00.000Z'), paginationToken: 'CI8JGgkpAJhJh7X///8=', score: 3.000213623046875 }, { genres: [ 'Drama', 'Romance' ], title: 'A Summer Place', released: ISODate('1959-11-18T00:00:00.000Z'), paginationToken: 'CLoJGgkpAGQJobX///8=', score: 2.579726457595825 }, { genres: [ 'Drama' ], title: 'The End of Summer', released: ISODate('1962-02-01T00:00:00.000Z'), paginationToken: 'CK0KGgkpAAzP18X///8=', score: 2.262615203857422 }, { genres: [ 'Drama', 'Romance' ], title: 'Summer and Smoke', released: ISODate('1962-04-01T00:00:00.000Z'), paginationToken: 'CMQKGgkpAECmB8f///8=', score: 2.579726457595825 }, { genres: [ 'Documentary', 'Sport' ], title: 'The Endless Summer', released: ISODate('1968-08-17T00:00:00.000Z'), paginationToken: 'CO4MGgkpAJjH5vX///8=', score: 2.579726457595825 }, { genres: [ 'Comedy', 'Drama', 'Romance' ], title: "Summer of '42", released: ISODate('1971-04-09T00:00:00.000Z'), paginationToken: 'CPQQGgkpAGRgUAkAAAA=', score: 2.579726457595825 }, { genres: [ 'Drama' ], title: 'That Certain Summer', released: ISODate('1972-11-01T00:00:00.000Z'), paginationToken: 'COwRGgkpAPQV0hQAAAA=', score: 2.579726457595825 } ]
結果をスキップして 2 ページから 5 ページへジャンプするには、searchSequenceToken
が生成するトークンを使用して、結果を取得する基準点を指定し、その後、結果で 20 件のドキュメントをスキップします。
サンプル クエリでは、前のクエリで同じタームのsearchSequenceToken
によって生成されたトークンを使用し、 $skip
} ステージと$limit
ステージを使用して、次のパイプライン ステージを使用してページ5の結果に移動します。
| |
指定された参照点の後の結果内の 20 件のドキュメントをスキップします。この参照点は、searchAfter を使用してページ 2 を取得するために実行したクエリの結果内の 20 番目のドキュメントに関連付けられたトークンです。 | |
結果を | |
ドキュメントの
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchAfter": "COwRGgkpAPQV0hQAAAA=", "sort": { "released": 1 } } }, { "$skip": 20 }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
[ { genres: [ 'Drama' ], title: 'A Storm in Summer', released: ISODate('2000-02-27T00:00:00.000Z'), paginationToken: 'CO5FGgkpAChakN0AAAA=', score: 2.262615203857422 }, { genres: [ 'Comedy', 'Romance' ], title: 'Wet Hot American Summer', released: ISODate('2002-04-11T00:00:00.000Z'), paginationToken: 'CKtIGgkpAFBUIu0AAAA=', score: 2.262615203857422 }, { genres: [ 'Comedy', 'Drama', 'Romance' ], title: 'Summer Things', released: ISODate('2002-10-09T00:00:00.000Z'), paginationToken: 'CIpPGgkpAFxzxvAAAAA=', score: 3.000213623046875 }, { genres: [ 'Adventure', 'Drama', 'Family' ], title: 'Wolf Summer', released: ISODate('2003-02-28T00:00:00.000Z'), paginationToken: 'COZWGgkpAGS6ofMAAAA=', score: 3.000213623046875 }, { genres: [ 'Animation', 'Adventure' ], title: 'Nasu: Summer in Andalusia', released: ISODate('2003-06-26T00:00:00.000Z'), paginationToken: 'CNlaGgkpAMxoAfYAAAA=', score: 2.262615203857422 }, { genres: [ 'Drama' ], title: 'Spring, Summer, Fall, Winter... and Spring', released: ISODate('2004-05-28T00:00:00.000Z'), paginationToken: 'CJ5ZGgkpAOjnyPwAAAA=', score: 1.8161234855651855 }, { genres: [ 'Comedy', 'Drama', 'Romance' ], title: 'Summer Storm', released: ISODate('2004-09-02T00:00:00.000Z'), paginationToken: 'CMVfGgkpAMRwvP4AAAA=', score: 3.000213623046875 }, { genres: [ 'Drama' ], title: 'Summer in the Golden Valley', released: ISODate('2004-10-08T00:00:00.000Z'), paginationToken: 'CNNWGgkpALTVdf8AAAA=', score: 2.0149309635162354 }, { genres: [ 'Drama', 'Romance' ], title: 'My Summer of Love', released: ISODate('2005-07-01T00:00:00.000Z'), paginationToken: 'CL5aGgkpAEyxzwQBAAA=', score: 2.262615203857422 }, { genres: [ 'Drama' ], title: 'Summer in Berlin', released: ISODate('2006-01-05T00:00:00.000Z'), paginationToken: 'CPZmGgkpANzclwgBAAA=', score: 2.579726457595825 } ]
Atlas Search ファセットを使用して結果をグループ化するには、任意のstring
フィールドをtoken
型としてインデックス付けする必要があります。次のクエリを実行し、movies
コレクションの genres
フィールドで結果をグループ化するには、インデックスを次の例のようにする必要があります。
{ "mappings": { "dynamic": true, "fields": { "genres": { "type": "token" } } } } }
サンプル クエリでは、次のパイプライン ステージを使用します。
| |
searchSequenceTokenオプションを使用して生成された結果内の各ドキュメントのトークンを保存するために | |
結果を | |
次のフィールドを返します。
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "facet": { "operator": { "text": { "path": "title", "query": "summer" } }, "facets": { "genresFacet": { "type": "string", "path": "genres" } } } } }, { "$addFields": { "paginationToken" : { "$meta" : "searchSequenceToken" } } }, { "$limit": 10 }, { "$facet": { "docs": [ { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : 1 } } ], "meta": [ { "$replaceWith": "$$SEARCH_META" }, { "$limit": 1 } ] } }, { "$set": { "meta": { "$arrayElemAt": ["$meta", 0] } } } ])
[ { docs: [ { genres: [ 'Drama', 'Romance' ], title: 'Summer', released: ISODate('1986-08-29T00:00:00.000Z'), paginationToken: 'CO0gFf1nZUA=' }, { genres: [ 'Musical', 'Romance' ], title: 'Summer Stock', released: ISODate('1951-01-22T00:00:00.000Z'), paginationToken: 'CJsFFYADQEA=' }, { genres: [ 'Drama' ], title: 'Violent Summer', released: ISODate('1959-11-13T00:00:00.000Z'), paginationToken: 'CI8JFYADQEA=' }, { genres: [ 'Drama' ], title: 'Indian Summer', released: ISODate('1978-11-01T00:00:00.000Z'), paginationToken: 'CNYRFYADQEA=' }, { genres: [ 'Drama' ], title: 'Indian Summer', released: ISODate('1978-11-01T00:00:00.000Z'), paginationToken: 'CNsRFYADQEA=' }, { genres: [ 'Comedy' ], title: 'Summer Rental', released: ISODate('1985-08-09T00:00:00.000Z'), paginationToken: 'CL8fFYADQEA=' }, { genres: [ 'Comedy', 'Drama', 'Romance' ], title: 'Summer Things', released: ISODate('2002-10-09T00:00:00.000Z'), paginationToken: 'CIpPFYADQEA=' }, { genres: [ 'Adventure', 'Drama', 'Family' ], title: 'Wolf Summer', released: ISODate('2003-02-28T00:00:00.000Z'), paginationToken: 'COZWFYADQEA=' }, { genres: [ 'Comedy', 'Drama', 'Romance' ], title: 'Summer Storm', released: ISODate('2004-09-02T00:00:00.000Z'), paginationToken: 'CMVfFYADQEA=' }, { genres: [ 'Drama', 'Romance' ], title: 'Summer Palace', released: ISODate('2007-04-18T00:00:00.000Z'), paginationToken: 'CIRrFYADQEA=' } ], meta: { count: { lowerBound: Long('65') }, facet: { genresFacet: { buckets: [ { _id: 'Drama', count: Long('48') }, { _id: 'Romance', count: Long('20') }, { _id: 'Comedy', count: Long('19') }, { _id: 'Family', count: Long('7') }, { _id: 'Adventure', count: Long('5') }, { _id: 'Crime', count: Long('5') }, { _id: 'Mystery', count: Long('5') }, { _id: 'Thriller', count: Long('5') }, { _id: 'Horror', count: Long('4') }, { _id: 'Action', count: Long('3') } ] } } } } ]