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

3つのコレクションを使用してmongodbで結合を実行しますか?

    さて、あなたはたくさんの問題を抱えているように見えます。まとめてみます。

    問題1:提供した集約コードがコンパイルされません。

    db.user_movies.aggregate(
    {$match : {mobile_no : mobile_no}},
    {$unwind: "$movies" },
    {$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
    {$unwind : "$bmarks"},
    {$match : {"bmarks.active": 1}},
    {$group : { _id : "$_id", movies : {$push : "$bmarks"}, movie_ids: {$push : "$bmarks.movie_id"}}},
    {$lookup: {from: "movie_comments", localField: "",foreignField: "movie_id",as: "comments"}},
    {$unwind : "$comments"},
    {$sort: {time_posted: -1}},
    {$group: {_id: '$_id', comments : {$push : "$comments"}}},
    

    修正:

    db.user_movies.aggregate([
    {$match : {mobile_no : mobile_no}},
    {$unwind: "$movies" },
    {$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
    {$unwind : "$bmarks"},
    {$match : {"bmarks.active": 1}},
    {$group : { _id : "$_id", movies : {$push : "$bmarks"}, movie_ids: {$push : "$bmarks.movie_id"}}},
    {$lookup: {from: "movie_comments", localField: "",foreignField: "movie_id",as: "comments"}},
    {$unwind : "$comments"},
    {$sort: {time_posted: -1}},
    {$group: {_id: '$_id', comments : {$push : "$comments"}}}])
    

    ここで、提供したものと同じデータを使用していると仮定します。

    問題2:{$match : {"bmarks.active": 1}} どのエントリとも一致しません。

    修正:{$match : {"bmarks.active": 0}}

    問題3:ルックアップフィールドが定義されていません{$lookup: {from: "movie_comments", localField: "",foreignField: "movie_id",as: "comments"}}

    修正:{$lookup: {from: "movie_comments", localField: "movie_ids",foreignField: "movie_id",as: "comments"}}

    問題4:以前のルックアップのmovie_idsのアンワインドステージがない

    修正:{$unwind : "$movie_ids"}

    問題5:時間投稿フィールド{$sort: {time_posted: -1}}

    修正:並べ替える前にフィールドを含める

    したがって、すべてをまとめるには、各映画のコメントを抽出するために、以下のように集約する必要があります。

    db.user_movies.aggregate([
    {$match : {mobile_no : mobile_no}},
    {$unwind: "$movies"},
    {$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
    {$unwind : "$bmarks"},
    {$match : {"bmarks.active": 0}},
    {$group : { _id : "$_id", movies : {$push : "$bmarks"}, movie_ids: {$push : "$bmarks.movie_id"}}},
    {$unwind : "$movie_ids"},
    {$lookup: {from: "movie_comments", localField: "movie_ids",foreignField: "movie_id",as: "comments"}},
    {$unwind : "$comments"},
    {$group: {_id: '$_id', comments : {$push : "$comments"}}}])
    

    サンプル出力

    {
        "_id": ObjectId("5834ecf7432d92675bde9d83"),
        "comments": [{
            "_id": ObjectId("583d96d7e35f6e9c53c9e894"),
            "movie_id": "dallas00",
            "comment": "what a great movie."
        }, {
            "_id": ObjectId("583d96d7e35f6e9c53c9e895"),
            "movie_id": "dallas00",
            "comment": "awesome movie."
        }]
    }
    

    更新:

    db.user_movies.aggregate([
    {$match : {mobile_no : mobile_no}},
    {$unwind: {path: "$movies", includeArrayIndex: "moviePosition"}},
    {$sort :  {moviePosition:1}},
    {$lookup: {from: "movies",localField: "movies",foreignField: "movie_id",as: "bmarks"}},
    {$unwind :"$bmarks"},
    {$group : {_id : "$_id", movies : {$push : {movie_name:"$bmarks.movie_name", movie_id:"$bmarks.movie_id"} }}},
    {$unwind : "$movies"},
    {$lookup: {from: "movie_comments", localField: "movies.movie_id",foreignField: "movie_id",as: "comments"}},
    {$unwind : "$comments"},
    {$group:  {_id: "$movies.movie_id", movie_name: {$first:"$movies.movie_name"}, comments : {$push : {comment:"$comments.comment", time_posted:"$comments.time_posted"}}}},
    {$sort :  {time_posted:-1}},
    {$project:{_id:0, movie_id:"$_id", movie_name:1, comments: "$comments.comment"}}
    ]).pretty();
    



    1. 単一の埋め込みドキュメントのMongoDBの単一フィールドを更新します

    2. node.jsを使用してmongodbにファイルを保存する

    3. MongoDB:コレクションをMongoDBからコンピューターに適切にエクスポートするにはどうすればよいですか?

    4. MongoDBPHPに埋め込まれたアイテムでドキュメントを見つける方法