sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの$unwind演算子とは何ですか?

    まず、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が行うことは、各要素のドキュメントを剥がして、その結果のドキュメントを返すことです。これを古典的なアプローチで考えると、「タグ配列の各アイテムについて、次のドキュメントのみを返す」と同等になります。そのアイテム」。

    したがって、以下を実行した結果:

    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
    }
    

    結果の配列で変更されるのは、tags値で返されるものだけであることに注意してください。これがどのように機能するかについての追加のリファレンスが必要な場合は、ここにリンクを含めました。これがお役に立てば幸いです。これまでに出会った中で最高のNoSQLシステムの1つにご参加いただければ幸いです。



    1. MongoDBのマルチテナントデータベースに対して推奨されるアプローチは何ですか?

    2. 明示的に接続を閉じる必要がありますか?

    3. クエリ結果セットに*変更*のストリームを提供できるNoSQLデータベースがある場合はどれですか?

    4. mongodbドキュメントのサブストリングを置き換える方法