まず、MongoDBへようこそ!
覚えておくべきことは、MongoDBはデータストレージに「NoSQL」アプローチを採用しているため、選択、結合などの考えを頭から消し去ってしまうことです。データを保存する方法は、ドキュメントとコレクションの形式であり、これにより、保存場所からデータを動的に追加および取得できます。
そうは言っても、$ unwindパラメーターの背後にある概念を理解するには、まず、引用しようとしているユースケースの内容を理解する必要があります。mongodb.orgのサンプルドキュメントは次のとおりです。
{
title : "this is my title" ,
author : "bob" ,
posted : new Date () ,
pageViews : 5 ,
tags : [ "fun" , "good" , "fun" ] ,
comments : [
{ author :"joe" , text : "this is cool" } ,
{ author :"sam" , text : "this is bad" }
],
other : { foo : 5 }
}
タグが実際には3つの項目の配列であることに注意してください。この場合は、「楽しい」、「良い」、「楽しい」です。
$ unwindの機能は、要素ごとにドキュメントをはがして、その結果のドキュメントを返すことです。これを古典的なアプローチで考えると、「tags配列内の各アイテムに対して、そのアイテムのみを含むドキュメントを返す」と同等です。
したがって、以下を実行した結果:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
次のドキュメントを返します。
{
"result" : [
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "good"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
}
],
"OK" : 1
}
結果の配列で変更されるのは、タグの値で返されるものだけです。これがどのように機能するかについての追加のリファレンスが必要な場合は、ここにリンクを含めました。これがお役に立てば幸いです。私がこれまでに出会った中で最高のNoSQLシステムの1つへの進出に成功してください。