sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB Aggregation:Dobbelt opslag og flet opslagssvar til det respektive objekt

Prøv denne forespørgsel :

db.companies.aggregate([
    { $match: { _id: companyId } },
    { $unwind: "$professionals_customers" },
    {
        $lookup: {
            from: "companies",
            localField: "professionals_customers.company",
            foreignField: "_id",
            as: "professionals_customers.company"
        }
    },
    {
        $lookup: {
            from: "users",
            localField: "professionals_customers.contact",
            foreignField: "_id",
            as: "professionals_customers.contact"
        }
    },
    {
        $addFields: {
            "professionals_customers.company": {
                $arrayElemAt: ["$professionals_customers.company", 0]
            },
            "professionals_customers.contact": {
                $arrayElemAt: ["$professionals_customers.contact", 0]
            }
        }
    },
    {
        $group: { _id: "$_id", professionals_customers: { $push: "$professionals_customers" }, data: { $first: "$$ROOT" } }
    },
    { $addFields: { "data.professionals_customers": "$professionals_customers" } },
    { $replaceRoot: { newRoot: "$data" } }
])

Test: MongoDB-Playground

Bemærk: Om nødvendigt skal du konvertere felter/input, som er af typen streng til ObjectId() . Grundlæggende er du nødt til at kontrollere typer af to felter, der sammenlignes, eller input-til-felt-i-DB-matches eller ej.




  1. Sådan får du flere rækker til en kommasepareret liste i SQL

  2. Django-nonrel ved hjælp af ListField, der indeholder EmbeddedObjects i admin

  3. Bedste måde at oprette forbindelse til MongoDB ved hjælp af Node.js

  4. Hvorfor giver PyMongo 3 ServerSelectionTimeoutError?