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

Jak znaleźć nazwę pola MongoDB na dowolnej głębokości?

Masz rację co do pewnego stwierdzenia, że ​​dokument BSON nie jest dokumentem XML. Ponieważ XML jest ładowany do struktury drzewa, która składa się z „węzłów”, wyszukiwanie dowolnego klucza jest dość łatwe.

Dokument MonoDB nie jest tak prosty w przetwarzaniu, a pod wieloma względami jest to „baza danych”, więc ogólnie oczekuje się, że będzie miał pewną „jednolitość” lokalizacji danych, aby ułatwić zarówno „indeksowanie”, jak i wyszukiwanie.

Niemniej jednak da się to zrobić. Ale oczywiście oznacza to rekurencyjny proces wykonywany na serwerze, a to oznacza przetwarzanie JavaScript za pomocą $where .

Jako podstawowy przykład powłoki, ale ogólna function jest po prostu ciągiem argumentu do $where operator wszędzie indziej:

db.collection.find(
  function () {
    var findKey = "find-this",
        findVal = "please find me";

    function inspectObj(doc) {
      return Object.keys(doc).some(function(key) {
        if ( typeof(doc[key]) == "object" ) {
          return inspectObj(doc[key]);
        } else {
          return ( key == findKey && doc[key] == findVal );
        }
      });
    }
    return inspectObj(this);
  }
)

Zasadniczo przetestuj klucze obecne w obiekcie, aby sprawdzić, czy pasują do żądanej „nazwy pola” i zawartości. Jeśli jeden z tych kluczy okaże się "obiektem", przejdź do funkcji i ponownie sprawdź.

JavaScript .some() upewnia się, że "pierwsze" znalezione dopasowanie powróci z funkcji wyszukiwania, podając true wynik i zwrócenie obiektu, w którym ten „klucz/wartość” był obecny na pewnej głębokości.

Zauważ, że $where zasadniczo oznacza przemierzanie całej kolekcji, chyba że istnieje inny poprawny filtr zapytań, który można zastosować do „indeksu” w kolekcji.

Dlatego używaj ostrożnie lub wcale i po prostu pracuj nad restrukturyzacją danych do bardziej użytecznej formy.

Ale to da ci dopasowanie.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie liczbowe Java Mongodb numberlong

  2. Mongoose findOneAndUpdate i upsert nie zwraca żadnych błędów, żadnych dokumentów nie ma wpływu

  3. sortowanie agregacji mongodb

  4. Usuń wszystkie symbole inne niż utf-8 z ciągu

  5. Importuj więcej niż 1 plik json za pomocą mongoimport