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

Utilizzo di $graphLookup per attraversare una struttura di dati nidificata in MongoDB

Non so se stai ancora cercando la risposta per questo, ma se usi la mangusta puoi sfruttare il compila la funzione e usala come middleware

Ecco un esempio:supponiamo di volere un elenco di persone e dei loro amici, e dei loro amici-amici, ecc. Il risultato dovrebbe essere simile al seguente:

[
    {
        _id: "abc123",
        name: "John Doe",
        friends: [
            {
                _id: "efg456",
                name: "Foo bar",
                friends: [
                    {
                        _id: "hij789",
                        name: "Jane Doe",
                        friends: [more friends...]
                    }
                ]
            }
        ]
]

Nel db sono memorizzati così

{_id: "abc123", name: "John Doe", friends: ["efg456"]}
{_id: "efg456", name: "Foo bar", friends: ["hij789"]}
{_id: "hij789", name: "Jane Doe", friends: [more friends...]}

Il tuo schema e il tuo middleware sarebbero:

const Person = new Schema<Folder>({
    name: {type: String, required: true},
    friends: [{type: Schema.Types.ObjectId, ref: "person"}],
}, {timestamps: true})

Person.pre("find", function(next) {
    this.populate("friends")
    next()
})

Aggiunta della funzione come middleware a find lo farà funzionare per ogni persona trovata. Ciò include i bambini negli friends matrice.