2012-10-21 41 views
6

Tôi có một thực thể lớn mà tôi đã tạo trong Play! trong Java và tôi chỉ muốn lấy một trường cụ thể từ cơ sở dữ liệu bằng Morphia và MongoDB. Bản thân thực thể là rất lớn và chứa nhiều trường, vì vậy tôi muốn cải thiện hiệu suất của ứng dụng của tôi bằng cách lấy chỉ một trường từ nó.Cách lấy một trường cụ thể từ một thực thể bằng cách sử dụng khung Morphia và Play trong Java

Tôi biết điều đó là có thể nhưng tôi không thể tìm ra chính xác làm thế nào để làm điều đó ...
Dưới đây là một số trong những lĩnh vực tôi có trong lớp học của tôi Shop:

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

Như bạn có thể nhìn thấy , trường primeCategory là một thực thể Category mà tôi muốn truy xuất. Tôi thấy điều gì đó giả sử để đạt được điều đó trong trang web của Morphia:

Datastore ds = null; 

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

Tôi không chắc chắn chính xác những gì tôi nhận được ở đây.

Sẽ rất tuyệt nếu ai đó có thể giải thích cho tôi nếu đây là cách và cách chính xác tôi nên làm điều đó, cũng như cung cấp một ví dụ.

+0

Tôi chắc chắn sẽ xem: Jongo là một giải pháp thay thế ODM. http://jongo.org/ và https://github.com/alexanderjarvis/play-jongo chỉ vì không có sự phát triển tích cực trên nhiều nha phiến atm. – Marc

+0

Những gì bạn đang làm có vẻ chính xác. Đối tượng 'shop' có được trả về bởi truy vấn null không? Nếu không, là 'shop.primeCategory' null? Hãy nhớ rằng bạn đang tạo một truy vấn sẽ tìm thấy tất cả các đối tượng Shop nhưng bạn đang gọi 'get()' để bạn chỉ lấy lại đối tượng Shop đầu tiên. – InPursuit

+0

cửa hàng và shop.primeCategory không phải là rỗng. Tôi chỉ muốn biết nếu đây là cách để làm điều đó hoặc có thể là tôi đang thiếu một cái gì đó ... – elad

Trả lời

6

thử này

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

Vâng, đối tượng trả về (Shop) là null ở tất cả các trường, và cũng là primeCategory. :( – elad

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

Sẽ lấy doc như thế này:

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

} 

Và bạn đang gặp một rất nỗ lực.

+0

bạn đã nhầm lẫn với lớp TaskAnalysis. Lớp TaskAnalysis.class sẽ được thay thế bằng Shop - vui lòng chỉnh sửa answer.class của bạn và tất cả các trường khác của đối tượng cửa hàng sẽ là rỗng. – elad

Các vấn đề liên quan