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

Rekursiv søgning på en samling i MongoDB

Fra MongoDB 3.4 kan vi gøre dette med Aggregation Framework.

Den første og vigtigste fase i vores pipeline er $graphLookup scene. $graphLookup giver os mulighed for rekursivt at matche i feltet "forælder" og "navn". Som et resultat får vi forfædrene til hvert "navn".

Næste trin i pipelinen er $match trin, hvor vi blot vælger det "navn", vi er interesseret i.

Den sidste fase er $addFields eller $project trin, hvor vi anvender et udtryk på "forfædre"-arrayet ved hjælp af $map array-operator.

Selvfølgelig med $reverseArray operatør, vi vender vores array for at få det forventede resultat.

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. Backend-lagrede procedureplanlæggere i MongoDB-databasen

  2. Gem Liste over grænsefladeobjekter ved hjælp af mongo-driver til java

  3. Tjek samlingseksistens i MongoDB

  4. hvordan man bruger aggregatfunktion i meteor