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

結合された結果を持つ要素のMongodbルックアップ配列

    そのマッピングは$lookupの外で実行する必要があります $map を実行する $arrayElemAt と一緒に 両方のアレイから単一のペアを取得してから、 $mergeObjects<を適用します。 / a> 結果として1つのオブジェクトを取得するには:

    db.Order.aggregate([
        {
            $lookup: {
                from: "products",
                localField: "context.products.id",
                foreignField: "_id",
                as: "productDetails"
            }
        },
        {
            $addFields: {
                productDetails: {
                    $map: {
                        input: "$productDetails",
                        in: {
                            _id: "$$this._id",
                            name: "$$this.context.name"
                        }
                    }
                }
            }
        },
        {
            $project: {
                _id: 1,
                "context.products": {
                    $map: {
                        input: "$context.products",
                        as: "prod",
                        in: {
                            $mergeObjects: [
                                "$$prod",
                                { $arrayElemAt: [ { $filter: { input: "$productDetails", cond: { $eq: [ "$$this._id", "$$prod.id" ] } } }, 0 ] }
                            ]
                        }
                    }
                }
            }
        }
    ])
    

    Mongo Playground

    最後のステップの目標は、2つの配列を取ることです:products およびproductDetails$lookupの出力 )そしてそれらの間の一致を見つけます。一致するものは常に1つあるため、取得できるアイテムは1つだけです$arrayElemAt 0$mapの出力として 「マージされた」ドキュメントを含む単一のアレイがあります。




    1. Meteorコレクションにmomentjsオブジェクトを挿入する

    2. 商用利用のためのMongoDB

    3. Mongodbで使用されているキャッシュを解放する方法は?

    4. Debian9へのMemcachedのインストール