sql >> Databasteknik >  >> NoSQL >> MongoDB

Rekursiv sökning på en samling i MongoDB

Med utgångspunkt från MongoDB 3.4 kan vi göra detta med Aggregation Framework.

Det första och viktigaste steget i vår pipeline är $graphLookup skede. $graphLookup tillåter oss att rekursivt matcha i fälten "förälder" och "namn". Som ett resultat får vi förfäderna till varje "namn".

Nästa steg i pipelinen är $match steg där vi helt enkelt väljer det "namn" vi är intresserade av.

Det sista steget är $addFields eller $project steg där vi applicerar ett uttryck på arrayen "förfäder" med hjälp av $map array-operator.

Naturligtvis med $reverseArray operatör vi vänder om vår array för att få det förväntade resultatet.

db.collection.aggregate(
    [ 
        { "$graphLookup": { 
            "from": "collection", 
            "startWith": "$parent", 
            "connectFromField": "parent", 
            "connectToField": "name", 
            "as": "ancestors"
        }}, 
        { "$match": { "name": "D" } }, 
        { "$addFields": { 
            "ancestors": { 
                "$reverseArray": { 
                    "$map": { 
                        "input": "$ancestors", 
                        "as": "t", 
                        "in": { "name": "$$t.name" }
                    } 
                } 
            }
        }}
    ]
)


  1. Vad är det korrekta sättet att fråga MongoDB för _id med sträng med Python?

  2. MongoDB-indexering för en Parse Server-applikation

  3. hur man frågar med ett specifikt fält istället för id i express js

  4. Använd MongoDB-aggregering för att hitta skärningspunkten mellan två uppsättningar i samma dokument