2016-05-27 9 views
3

mongodbのデータを照会し、mongodbから結果を取得するためにspringデータでelemMatchを使用するには、何か助けが必要です。私は特定のtestRunの結果を取得したいネストしたオブジェクトのスプリングデータにelemMatchを使用してmongodbからデータを取得する方法

は、私はMongoDBの中に、以下のデータを持っているtestRun = 1

言う:モンゴコンソールで

[ { 
"testMethod": "initialization", 
"testCase": "com.harish.test.TestNGRest.OrganisationGetTest", 
"build": 1, 
"ranNumberofTimes": 2, 
"failed": 0, 
"success": 2, 
"testRuns": [ 
    { 
    "testMethod": "initialization", 
    "testCase": "com.harish.test.TestNGRest.OrganisationGetTest", 
    "branchName": "branch_1", 
    "testRun": 1, 
    "success": 1, 
    "fail": 0, 
    "timetorun": 0, 
    "cases": [ 
     { 
     "caseId": 1, 
     "status": "success", 
     "failreason": null, 
     "startDate": "Fri May 27 14:41:22 EDT 2016", 
     "endDate": "Fri May 27 14:41:22 EDT 2016" 
     } 
    ], 
    "startDate": "Fri May 27 14:41:22 EDT 2016", 
    "endDate": "Fri May 27 14:41:22 EDT 2016" 
    }, 
    { 
    "testMethod": "initialization", 
    "testCase": "com.harish.test.TestNGRest.OrganisationGetTest", 
    "branchName": "branch_1", 
    "testRun": 2, 
    "success": 1, 
    "fail": 0, 
    "timetorun": 1, 
    "cases": [ 
     { 
     "caseId": 1, 
     "status": "success", 
     "failreason": null, 
     "startDate": "Fri May 27 14:41:49 EDT 2016", 
     "endDate": "Fri May 27 14:41:49 EDT 2016" 
     } 
    ], 
    "startDate": "Fri May 27 14:41:49 EDT 2016", 
    "endDate": "Fri May 27 14:41:49 EDT 2016" 
    } 
] 

私は、次のコマンドを使用して結果を得た:

db.test.find({"testRuns.testRun":1},{"testRuns":{"$elemMatch":{"testRun":1}}}).pretty() 

私はmongoコンソールで自分の要件の結果を得ました。

実際の質問はここにあります。私はJavaコードで結果を取得するために春のデータを使用しました。

return mongoTemplate.find(BasicQuery.query(Criteria.where("testRuns.testRun").is(testRun).andOperator(Criteria.where("testRuns").elemMatch(Criteria.where("testRun").is(testRun)))),Test.class, COLLECTION_NAME); 

ただし、特定のテスト実行の結果を取得できません。誰かがこの問題を解決するのを助けてくれますか?

ありがとうございます。

答えて

1

「testRuns.testRun」= 1を取得する場合は、$ elemMatchは必要ありません。第2の条件はありません。 mongoのリファレンスドキュメントのリンクの以下の文を参照してください。

「$ elemMatchは一つだけ条件を指定しているので、$ elemMatch式が不要であり、代わりにあなたが次のクエリを使用することができます。」

db.survey.find(
{ "results.product": "xyz" } 
) 

https://docs.mongodb.com/manual/reference/operator/query/elemMatch/

私がテストしていますそのポストに与えられたデータでコードの下に。それはうまく動作します。

testRun変数がJavaコードでIntegerとして定義されていることを確認してください。他のデータ型の場合、クエリは結果を返しません。

query.addCriteria(Criteria.where("testRuns.testRun").is(testRun)); 
mongoOperations.find(query, Stack.class); 
+0

こんにちは@notionquest。実際には、私は1つのコレクションで私のポストで提供したものと同じ多くのレコードを持っています。あなたが提供したクエリと私が提供したクエリを試しましたが、両方とも自分の必要条件に一致する特定のレコードではなくコレクション内のすべてのレコードを取得します。 1または2または任意の数値のような任意のtestRun値のレコードを取得するためのクエリを私に提供できますか? – harish

+0

@harish、これを明確にするために、クエリはtestRun = 1(つまり、この条件に一致する配列要素の1つ)のドキュメント全体を保持します。さらにフィルタリングしたい場合は、フィルタ条件にtestMethod、ビルドなどの最上位フィールドの1つを追加する必要があります。 – notionquest

+0

Ok @notionquest。お返事をありがとうございます。私はあなたの答えを承認しました:) – harish

関連する問題