2

必要な結果を返すための適切な集約パイプ操作を理解するのに苦労しています。

次のようなコレクションがあります:-

{
    "_id" : "writer1",
    "Name" : "writer1",
    "Website" : "website1",
    "Reviews" : [
            {
                    "Film" : {
                            "Name" : "Jurassic Park",
                            "Genre" : "Action"
                    },
                    "Score" : 4
            },
            {
                    "Technology" : {
                            "Name" : "Mad Max",
                             "Genre" : "Action"
                    },
                    "Score" : 5
            }
    ]
}
{
    "_id" : "writer2",
    "Name" : "writer2",
    "Website" : "website1",
    "Reviews" : [           
            {
                    "Technology" : {
                            "Name" : "Mad Max",
                             "Genre" : "Action"
                    },
                    "Score" : 5
            }
    ]
}

そして、これはこれまでの私の集計です: -

db.writers.aggregate([
    { "$unwind" : "$Reviews" },
    { "$match" : { "Reviews.Film.Name" : "Jurassic Park" } },
    { "$group" : { "_id" : "$Website" , "score" : { "$avg" : "$Reviews.Score" },
        writers :{ $push: { name:"$Name", score:"$Reviews.Score" } }
    }}
])

これは、一致する映画のレビューを持っている作家と、映画をレビューした作家が少なくとも 1 人いる Web サイトのみを返します。ただし、すべての作家のリストを含むすべての Web サイトを返す必要があります。彼らは指定された映画のレビューを書いていません。

だから、私は現在得ています: -

{ "_id" : "website1", "score" : 4, "writers" : [ { "name" : "writer1", "score" : 4 } ] }

私が実際に必要なとき: -

{ "_id" : "website1", "score" : 2, "writers" : [ { "name" : "writer1", "score" : 4 },{ "name" :"writer2", "score" : 0 } ] }

誰かが私を正しい方向に向けることができますか?

乾杯

4

0 に答える 0