2012-10-21 6 views
6

私はPlayで作成した大きなエンティティを持っています! Javaのフレームワークであり、MorphiaとMongoDBを使用してデータベースから特定のフィールドのみを取得したいと考えています。エンティティ自体は非常に大きく、多くのフィールドを含んでいるので、そこから1つのフィールドだけを取得することで、アプリケーションのパフォーマンスを向上させたいと考えています。MorphiaとJavaのPlayフレームワークを使用してエンティティから特定のフィールドを取得する方法

ここ
は、私は私のクラスShopを持っている分野の一部です...私はそれが可能である知っているが、私はそれを行うために正確にどのように把握することはできません。あなたが見ることができるように

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

primeCategoryフィールドは、取得したいCategoryエンティティです。

Datastore ds = null; 

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

私はまさに私がここにきてる何をするかわからない: 私はMorphiaのウェブサイトでそれを達成すると仮定何かを見ました。

これが方法であり、それをいかに正確に行うべきか、そして例を挙げると、誰かが私に説明することができれば素晴らしいことでしょう。

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

} 

そして、あなたは良い試みを持っている:

+0

私は確かにチェックアウトします.JongoはODMの代替品です。 http://jongo.org/ と https://github.com/alexanderjarvis/play-jongo morphiaのATMに多くの積極的な開発がないという理由だけで。 – Marc

+0

あなたがしていることが正しいように見えます。 'shop'オブジェクトはクエリnullによって返されますか?そうでない場合、 'shop.primeCategory'はnullですか?すべてのShopオブジェクトを検索するクエリーを作成していますが、 'get()'を呼び出すと、最初のShopオブジェクトだけが返されます。 – InPursuit

+0

shopとshop.primeCategoryはnullではありません。私はこれがそれを行う方法であるかどうかを知りたいのですが、何か不足しているかもしれません... – elad

答えて

6

この

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

返されたオブジェクト(Shop)はすべてのフィールドでnullであり、primeCategoryもnullです。 : – elad

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

を試すには、このようなドキュメントを取得するでしょう。

+0

私はTaskAnalysisクラスと混同しています.TaskAnalysis.classはShopに置き換えてください。あなたのanswer.classを編集してください。ショップオブジェクトの他のフィールドはすべてnullになります。 – elad

関連する問題