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

Rekurzivní vyhledávání v kolekci v MongoDB

Počínaje MongoDB 3.4 to můžeme udělat pomocí Aggregation Framework.

První a nejdůležitější fází v našem kanálu je $graphLookup etapa. $graphLookup nám umožňuje rekurzivně porovnat pole „rodič“ a „jméno“. Výsledkem je, že získáme předky každého "jména".

Další fází v procesu je $match fázi, kdy jednoduše vybereme "jméno", které nás zajímá.

Poslední fází je $addFields nebo $project fázi, kdy aplikujeme výraz na pole "předků" pomocí $map operátor pole.

Samozřejmě s $reverseArray operátor obrátí naše pole abyste dosáhli očekávaného výsledku.

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. Odlišné hodnoty klíče v dílčím dokumentu MongoDB (100 milionů záznamů)

  2. node-mongodb-native MongoClient neočekávaně ukončuje připojení

  3. Mongodb vytváří alias v dotazu

  4. mgo - výkon dotazu se zdá trvale pomalý (500-650 ms)