MongoDB -集約フレームワーク-シリーズ
7103 ワード
イントロノート
ご存知のように、システムを設計することはデータを形作ることです.
あなたはそれを正確にどのようにデータを形成する能力を容易にするツールが必要です.
このシリーズの別の例を試してみましょう.
あなたが音楽アーティストのコレクションを持っていると仮定します
たとえば、すべてのアーティストには、それの中で「獣」という語を持つ歌タイトルがあります.
/*
@datamodel
[
{
artist: "",
bio: "",
genre: [],
albums: [
{
albumTitle: ""
songTitles: [
{
song: ""
}
]
}
]
}
]
*/
このテスト例では、テスト結果セットを小さくし、最初の5つの結果だけを検索し、戻りフィールド(投影フィールド)をアーティストとSearchResultフィールドだけに制限します.
const searchTerm = "beast";
const regex = new RegExp(`${searchTerm}`, "i");
//albumSongs by regex
lpromiseStringify(
mgArr(dbEnum.nlpdb, collEnum.songsColl,
copyField("searchResult", "albums"),
unwindArr("searchResult"),
unwindArr("searchResult.albumSongs"),
matchRegex("searchResult.albumSongs.song", regex),
limit(5),
projectIncludeNoId("artist", "searchResult"),
)
);
/*
@output
[
{
"artist": "Peter, Paul & Mary",
"searchResult": {
"albumTitle": "album: A Holiday Celebration (1988)",
"albumSongs": {
"song": "The Friendly Beasts"
}
}
},
{
"artist": "Peabo Bryson",
"searchResult": {
"albumTitle": "album: Through The Fire (1994)",
"albumSongs": {
"song": "Beauty And The Beast"
}
}
},
{
"artist": "Fugees",
"searchResult": {
"albumTitle": "album: The Score (1996)",
"albumSongs": {
"song": "The Beast"
}
}
},
{
"artist": "Classified",
"searchResult": {
"albumTitle": "album: Tomorrow Could Be The Day Things Change (2018)",
"albumSongs": {
"song": "Beastie Boy"
}
}
},
{
"artist": "John Anderson",
"searchResult": {
"albumTitle": "album: Goldmine (2015)",
"albumSongs": {
"song": "Louisiana Son Of A Beast"
}
}
}
]
*/
ノート
他のユースケースには$ addFieldが使用されていますので、今後はそれについてお話します.
私たちは、アルバムを最初にコピーする必要があります.なぜなら、私たちのスペックによって、私たちは呼び出し元に完全なアルバムセットを返したいからです.
それの新しいコピーは、検索用語を含む結果だけにフィルタダウンされることによって変異されます.
それはフラットのようです.それはARRの各々のELEMのために新しいルート文書をつくります.したがって、アーティストが5枚のアルバムを持っているならば、我々は現在アルバム分野によって異なる5つのアーティスト・オブジェクトを持っています.
入れ子になったループを行う方法です.
それは非常に有用な、人気のある、強力なコマンドです.あとでもっと話をします.
Matchregex ("searchresults . albumsong . song ", regex )
フレームワークがデフォルトで含むPK(primary key)を除くFunc Forceのこの変形の一部の“noid”部分.
あなたの生産質問において、あなたはPKを通常含むでしょう、しかし、私がPKがテストしているものの一部でないとき、私はテストのためにこの「NOID」変種を使用します.それは、そのノイズを削除します.
次は何
何か不明であれば、何か質問があれば、知らせてください.
今後は、このデータ整形システムを構成するユーティリティとラッパー機能に、より多くのものを得ることになります.それらのほとんどは単純なonelinersです.
資源
arr、obj、elem、funcのようないくつかの省略形を使用することに気づくでしょう.
リストは以下の通りです.
addfieldコマンド
https://docs.mongodb.com/manual/reference/operator/aggregation/addFields
アンンドコマンド
https://docs.mongodb.com/manual/reference/operator/aggregation/unwind
Reference
この問題について(MongoDB -集約フレームワーク-シリーズ), 我々は、より多くの情報をここで見つけました https://dev.to/functional_js/mongodb-aggregation-framework-series-02-3o04テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol