MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb:obliczone connectToField wewnątrz graphlookup

connectToField to imię, a nie wyrażenie. Nie możesz nic z tym zrobić.

Naprawdę musisz ponownie rozważyć schemat. Jest wadliwy pod wieloma względami, zaczynając od nieunikalnych nazw używanych w odnośnikach nadrzędnych. Ponieważ zamiast tego polegasz na łańcuchu ścieżki , potrzebujesz ścieżki do odniesienia do rodzica.

Poniższa odpowiedź określa czas działania i jest mało wskazana w przypadku zapytań operacyjnych ze względu na nieefektywność wydajności i pewne założenia dotyczące budowy ścieżki. Może być jednak użyty jako jednorazowa prośba.

Zasadniczo musisz utworzyć widok z obliczoną ścieżką nadrzędną:

db.createView("rootless_tree", "tree", [
    { $match: { parent: { $ne: null } } },
    { $addFields: {
        parent_path: { $let: {
            vars: { parents: { $split: [ "$path", "#" ] } },
            in: { $reduce: {
                input: { $slice: [ "$$parents", 1, { $subtract: [ { $size: "$$parents" }, 2 ] } ] },
                initialValue: "",
                in: { $concat: [ "$$value", "#", "$$this" ] }
            } }
        } }
    } }
]);

Możesz więc wykonać wyszukiwanie zgodnie z zaleceniami w poprzednim pytaniu:

db.tree.aggregate([
    { $graphLookup: {
        from: "rootless_tree", 
        startWith: "$path", 
        connectFromField: "path", 
        connectToField: "parent_path", 
        as:"dep"
    } },
    { $match: { dep: [] } },                       
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak mogę zaimplementować uprawnienia na poziomie pola dla MongoDB?

  2. Mongoose dodaje atrybut wygasa dla określonego pola

  3. Jak opisać kolekcję w Mongo?

  4. mongodb $where zapytanie do pobrania treści poddokumentu

  5. Nadmiernie powolne zapytanie MongoDB, mimo że zapytanie jest proste i dopasowane do indeksów