2012-10-21 21 views
6

Mam duży podmiot, który stworzyłem w Play! framework w Javie i chciałbym pobrać tylko określone pole z bazy danych za pomocą Morphia i MongoDB. Sam obiekt jest bardzo duży i zawiera wiele pól, dlatego chciałbym poprawić wydajność mojej aplikacji, pobierając z niej tylko jedno pole.Jak odzyskać konkretne pole z podmiotu używającego Morphia and Play framework w Javie

wiem, że to jest możliwe, ale nie mogę dowiedzieć się dokładnie, jak to zrobić ...
Oto niektóre z dziedzin mam w klasie Shop:

public String imagePath; 
public String profileImagePath; 
public String Motto; 
@Reference 
public Category primeCategory; 
public boolean isOnline; 

Jak widać , pole primeCategory jest encją Category, którą chcę odzyskać. ujrzałem coś, co rzekomo osiągnąć w witrynie morfinę za:

Datastore ds = null; 

Shop shop = ds.createQuery(Shop.class).retrievedFields(true, "primeCategory").get(); 

Nie jestem pewien, co dokładnie zrobić Dostaję tutaj.

Byłoby wspaniale, gdyby ktoś mógł mi wytłumaczyć, czy to jest sposób i jak dokładnie powinienem to zrobić, a także podać przykład.

+0

Zdecydowanie sprawdzę: Jongo jako alternatywa ODM. http://jongo.org/ i https://github.com/alexanderjarvis/play-jongo tylko dlatego, że nie ma wiele aktywny rozwój na morfinę atm. – Marc

+0

Co robisz, wygląda poprawnie. Czy obiekt 'sklep' został zwrócony przez zapytanie zerowe? Jeśli nie, to 'shop.primeCategory' null? Pamiętaj, że tworzysz zapytanie, które znajdzie wszystkie obiekty Shop, ale nazywasz 'get()', aby odzyskać tylko pierwszy obiekt Shop. – InPursuit

+0

shop i shop.primeCategory nie są puste. Chcę tylko wiedzieć, czy to jest sposób, aby to zrobić, czy może brakuje mi czegoś ... – elad

Odpowiedz

6

spróbować

Shop.createQuery().retrievedFields(true, "primeCategory").get() 
+0

Cóż, zwracany obiekt (Shop) miał wartość zerową we wszystkich polach, a także primeCategory. :( – elad

0
Shop shop = ds.createQuery (Shop.class).retrievedFields (true,"primeCategory","Other_field_1","Other_field_2").get(); 

Czy odzyskać doc tak:

{ 
    "_id":ObjectId("..."), 
    "primeCategory":{ 
         ... 
        }, 
    "Other_field_1":"....", 
    "Other_field_2":"...." 

} 

I masz wspaniałą okazję.

+0

masz mnie mylić z klasy TaskAnalysis.Zadanie TaskAnalysis.class należy zastąpić Shop - edytuj swój answer.class, a wszystkie inne pola obiektu sklepu będą miały wartość null. – elad