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

Mongoid store_in generuje losowe wyniki

Zajęło mi to trochę czasu, ale znalazłem odpowiedź. Postanowiłem to opublikować, mając nadzieję, że pomoże innym.

Mongoid implementuje coś, co nazywa się „dziedziczeniem pojedynczej tabeli”. Gdy tylko wyprowadzisz klasę podrzędną z klasy nadrzędnej, dziecko będzie przechowywane w kolekcji nadrzędnej, dodając atrybut „typ”. Użycie "store_in" mówi mongodb jawnie, w której kolekcji ma przechowywać dokumenty. Zdefiniowanie store_in w klasie potomnej powoduje, że mongoid przechowuje wszystko (włącznie z rodzicem) w danej kolekcji. Myślę, że przy użyciu dedykowanych przypisań store_in dla każdego dziecka bałagan mongoid up. Jednak w rezultacie dokumenty są przechowywane losowo w dowolnej z podanych kolekcji.

Można to rozwiązać w Rubim, używając modułu jako domieszki dla wspólnej funkcjonalności. Jest to dość dobrze opisane w ten dokument .

ALE zdecydowałem się tego nie robić! Powodem, dla którego tego chciałem, jest to, aby moje kolekcje były małe, mając nadzieję na uzyskanie lepszej wydajności. Po rozmowie z ekspertami (10 generacji) myślę, że lepszym podejściem jest użycie kolekcji obiektów z jednym rodzicem dla wszystkich elementów podrzędnych. Nie powinno to mieć wpływu na wydajność mongodb, ale rozwiązanie staje się znacznie bardziej elastyczne. W rzeczywistości znacznie lepiej wykorzystuje to projekt bez schematu w mongodb.

Kod znów będzie wyglądał tak:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

class ChildClass1 < BaseClass
  ...individual functionality...
end  

class ChildClass2 < BaseClass
  ...individual functionality...
end



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongooseError — Przekroczono limit czasu buforowania operacji `users.findOne()` po 10000 ms

  2. Czy można skonfigurować częstotliwość pulsu lub limit czasu dla repliki?

  3. Junit/Fongo:Jak korzystać z Fongo w teście jednostkowym do sprawdzania NotNull

  4. Przechowuj plik obrazu w danych binarnych w schemacie mangusty i wyświetlaj obraz w formie html

  5. Agregacja MongoDB w zakresie