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

外部フィールドが配列の場合のMongoDBルックアップ

    $lookupを使用できますカスタムパイプライン これにより、0が得られます または1 結果を取得してから、 $size を使用します。 配列を単一のブール値に変換するには:

    db.reports.aggregate([
        {
            $lookup: {
                from: "users",
                let: { report_id: "$_id" },
                pipeline: [
                    {
                        $match: {
                            $expr: {
                                $and: [
                                    { $eq: [ "$name", "Mike" ] },
                                    { $in: [ "$$report_id", "$favorites" ] }
                                ]
                            }
                        }
                    }
                ],
                as: "users"
            }
        },
        {
            $project: {
                _id: 1,
                name: 1,
                favorite: { $eq: [ { $size: "$users" }, 1 ] }
            }
        }
    ])
    

    または、3.6より前のバージョンのMongoDBを使用する必要がある場合は、通常の$lookupを使用できます。 次に、 $filter を使用します nameのユーザーのみを取得する Mikeです :

    db.reports.aggregate([
        {
            $lookup: {
                from: "users",
                localField: "_id",
                foreignField: "favorites",
                as: "users"
            }
        },
        {
            $project: {
                _id: 1,
                name: 1,
                favorite: { $eq: [ { $size: { $filter: { input: "$users", as: "u", cond: { $eq: [ "$$u.name", "Mike" ] } } } }, 1 ] }
            }
        }
    ])
    


    1. CKANの非同期バックグラウンドジョブを使用して何ができますか?

    2. MongoDB:java.lang.IllegalStateException:状態は次のようになります:open

    3. MongoDB NodeJSネイティブドライバー(mongodb)とMongoシェルのパフォーマンス

    4. Clouderaオペレーショナルデータベースアプリケーション開発の概念