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

$ lookupの結果に条件をmongoDBに適用するにはどうすればよいですか?

    「$lookup」の戻り値は配列値であるため、「$lookup」の後のオブジェクトメソッドで「$match」を使用することはできません。ルックアップ後に「$unwind」関数を追加してグループ化することをお勧めします。

    クエリの例

     db
    .album
    .aggregate([
        {
            $lookup:{
                from:"photo",
                localField:"_id",
                foreignField:"album_id",
                as:"photo"
            }
         },
        {
            preserveNullAndEmptyArrays : true,
            path : "$photo"
        },
        {
            $match:{
                "photo.flag": 1
            }
         },
         {
            $group : {
                _id : {
                    id : "$_id",
                    album_name: "$album_name",
                    album_description: "$album_description",
                    emoji_id: "$emoji_id"
                },
                photo: {
                    $push : "$photo"
                }
            }
         }
        {
             $lookup:{
                from:"emoji",
                localField:"_id.album_emoji",
                foreignField:"_id",
                as:"emoji"
             }
        },
        {
             $project:{
                album_name:"$album_name",
                album_description:"$album_description",
                emoji:"$emoji",
                photo:"$photo",
                total_photos: {$size: "$photo"}
             }
        }
    ])
    

    または、「$filter」を使用します。

    db
    .album
    .aggregate([
        {
            $lookup:{
                from:"photo",
                localField:"_id",
                foreignField:"album_id",
                as:"photo"
            }
         },
        {
            $project: {
                id : "$_id",
                album_name: "$album_name",
                album_description: "$album_description",
                emoji_id: "$emoji_id",
                photo: {
                    $filter : {
                        input: "$photo",
                        as : "photo_field",
                        cond : {
                            $eq: ["$$photo_field.flag",1]
                        }
                    }
                }
            }
        },
        {
             $lookup:{
                from:"emoji",
                localField:"album_emoji",
                foreignField:"_id",
                as:"emoji"
             }
        },
        {
             $project:{
                album_name:"$album_name",
                album_description:"$album_description",
                emoji:"$emoji",
                photo:"$photo",
                total_photos: {$size: "$photo"}
             }
        }
    ])
    


    1. AzureのASP.NETCoreを使用してRedisでユーザーセッションを保存する

    2. マングース:スキーマvsモデル?

    3. 複数の条件とスライスを使用したMongoDBクエリ

    4. mongodbリポジトリにカスタムクエリを書き込む