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

Czy istnieje sposób na odwzorowanie typu pola?

Jest kilka problemów, które sprawiają, że jest to niepraktyczne:

  1. Ponieważ zapytanie jest parametrem odróżniającym od możliwości wykonania prognozy, nie jest to możliwe z pojedynczego zapytania, ponieważ na projekcję nie mogą wpływać wyniki zapytania
  2. Ponieważ w ramach agregacji nie ma możliwości iteracji pól i typu sprawdzania, nie jest to również możliwe

Biorąc to pod uwagę, istnieje nieco dziwny sposób korzystania z funkcji Map-Reduce, która daje podobne odpowiedzi, aczkolwiek w stylu wyjściowym w stylu Map-Reduce, który nie jest niesamowity:

map = function() {
    function isNumber(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    }

    var numerics = [];
    for(var fn in this) {
        if (isNumber(this[fn])) {
            numerics.push({f: fn, v: this[fn]});
        }
        if (Array.isArray(this[fn])) {
            // example ... more complex logic needed
            if(isNumber(this[fn][0])) {
                numerics.push({f: fn, v: this[fn]});
            }
        }
    }
    emit(this._id, { n: numerics });
};

reduce = function(key, values) {
  return values;  
};

Nie jest kompletny, ale wyniki są podobne do tego, czego oczekiwałeś:

"_id" : ObjectId("52fac254f40ff600c10e56d4"),
 "value" : {
         "n" : [
                 {
                         "f" : "list",
                         "v" : [
                                 1,
                                 2,
                                 3,
                                 4,
                                 5
                         ]
                 },
                 {
                         "f" : "views",
                         "v" : 5
                 }
         ]
 }

Mapa po prostu patrzy na każdą właściwość i decyduje, czy wygląda jak liczba... a jeśli tak, dodaje do tablicy, która będzie przechowywana jako obiekt, aby silnik map-reduce nie dławił danych wyjściowych tablicy. W przykładowym kodzie utrzymałem to w prosty sposób - na pewno można poprawić logikę sprawdzania liczb i tablic. :)

Oczywiście nie działa jak find lub agregacji, ale ponieważ MongoDB nie został zaprojektowany z myślą o tym, może to być konieczne, jeśli naprawdę potrzebujesz tej funkcji.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć się z MongoDB Atlas (queryTxt ETIMEOUT)

  2. Mongo-go-driver error Nowy błąd klienta ClientOptions w argumencie mongo.NewClient

  3. wyrzuć nową mangusę.Error.MissingSchemaError(nazwa); ^ MongooseError:Schemat nie został zarejestrowany dla sprzedawcy modeli

  4. MongoDB - stronicowanie

  5. Jak pisać zapytania składające w mongoDB