What's the $unwind operator in MongoDB?

后端 未结 6 1087
日久生厌
日久生厌 2020-11-27 12:41

This is my first day with MongoDB so please go easy with me :)

I can\'t understand the $unwind operator, maybe because English is not my native language

6条回答
  •  清酒与你
    2020-11-27 12:56

    Let me explain in a way corelated to RDBMS way. This is the statement:

    db.article.aggregate(
        { $project : {
            author : 1 ,
            title : 1 ,
            tags : 1
        }},
        { $unwind : "$tags" }
    );
    

    to apply to the document / record:

    {
     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 }
    }
    

    The $project / Select simply returns these field/columns as

    SELECT author, title, tags FROM article

    Next is the fun part of Mongo, consider this array tags : [ "fun" , "good" , "fun" ] as another related table (can't be a lookup/reference table because values has some duplication) named "tags". Remember SELECT generally produces things vertical, so unwind the "tags" is to split() vertically into table "tags".

    The end result of $project + $unwind:

    Translate the output to JSON:

    { "author": "bob", "title": "this is my title", "tags": "fun"},
    { "author": "bob", "title": "this is my title", "tags": "good"},
    { "author": "bob", "title": "this is my title", "tags": "fun"}
    

    Because we didn't tell Mongo to omit "_id" field, so it's auto-added.

    The key is to make it table-like to perform aggregation.

提交回复
热议问题