sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb vyhledávací pole prvků s kombinovaným výsledkem

Toto mapování musíte spustit mimo $lookup spuštěním $map spolu s $arrayElemAt získat jeden pár z obou polí a poté použít $mergeObjects získat jeden objekt jako výsledek:

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 ] }
                        ]
                    }
                }
            }
        }
    }
])

Hřiště Mongo

Cílem posledního kroku je vzít dvě pole:products a productDetails (výstup $lookup ) a najděte mezi nimi shodu. Víme, že vždy existuje jedna shoda, takže můžeme získat pouze jednu položku $arrayElemAt 0 . Jako výstup $map bude jediné pole obsahující "sloučené" dokumenty.




  1. Aplikaci se nepodařilo spustit (port 8080) není k dispozici

  2. textové vyhledávání mongodb pomocí více jazyků

  3. Vložený dokument vs reference v designovém modelu mongoose?

  4. Dotazování MongoDB na základě Mongo ID v aplikaci node.js