2017-01-25 16 views
0

私は以下のように私のコレクションを持っています内の特定のフィールドに基づいてクエリ結果をソートする方法:MongoDBの

{ 
    "_id" : NumberLong(366), 
    "file" : "xyz", 
    "meta" : [{ 
        "owner" : "user123", 
        "rating": "A" 
    }] 
} 

私は

が、私は以下のコードを試してみました所有者に基づいてクエリ結果をソートしたいが、並べ替えが動作していません

誰でも私にこれを手伝ってもらえますか?

query = new Query(); 
query.addCriteria(Criteria.where("meta.rating").is("A")); 
query.with(new Sort(Sort.Direction.ASC, "meta.owner")); 
mongoOperations.find(query, Test.class); 

私のテストクラス: ここで私は別のモデル

@Document(collection = "Test_Data") 
public class Test{ 
@Id 
private long id; 
private String file; 
private List<MetaList> meta; 
public long getId() { 
    return id; 
} 
public void setId(long id) { 
    this.id = id; 
} 
public String getFile() { 
    return file; 
} 
public void setFile(String file) { 
    this.file = file; 
} 
public List<MetaList> getMeta() { 
    return meta; 
} 
public void setMeta(List<MetaList> meta) { 
    this.meta= meta; 
} 
} 

マイメタリストクラスであるリストを持っています:

public class MetaList{ 
private String owner; 
private String rating; 
public String getOwner() { 
    return owner; 
} 
public void setOwner(String owner) { 
    this.owner= owner; 
} 
public String getRating() { 
    return rating; 
} 
public void setRating(String rating) { 
    this.rating= rating; 
} 
} 
+0

'Test'クラスには' @ Document'というアノテーションが付けられており、データベースのコレクションを参照していますか? – ares

+0

はい、注釈が付けられています。メタ自体はリストなので何かをする必要があります – krishna

+0

あなたのモデルクラスを投稿できますか? 'Test' – ares

答えて

0

定期的なクエリは、トップレベルのフィールドを並べ替えるだけを許可します。構造体を修正するか、集約を使用して埋め込み配列の値をソートします。

Aggregation agg = newAggregation(Test.class, 
       unwind("meta"), 
       match(where("meta.rating").is("A")), 
       sort(ASC, "meta.owner"), 
       group(fields("id", "file")).push("meta").as("meta")); 

List<Test> results = mongoOperations.aggregate(agg, Test.class); 
+0

そして私は、AggragationOutputまたはDBCursorオブジェクトの結果をモーダルクラスに変換する方法をもう1つ疑問に思っています。 – krishna

+0

春がそれを処理します。手動マッピングを行う必要はありません。 – Veeram

+0

上記のコードを使用すると、次の例外が発生します。MongoOperations型の集計(TypedAggregation 、クラス)は引数(集計、クラス)には適用されません – krishna