java - 如何在 spring 数据中使用 elemMatch 为嵌套对象从 mongodb 检索数据

标签 java spring mongodb spring-data spring-data-mongodb

我需要一些关于在 spring 数据中使用 elemMatch 来查询 mongodb 中的数据并从 mongodb 检索结果的帮助。

我想检索特定 testRun 的结果,比如 testRun=1

我在 mongodb 中有以下数据:

[ {
"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"
  }
]

在 mongo 控制台中,我使用了以下命令并得到了结果:

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

我在 mongo 控制台中得到了满足我要求的结果。

真正的问题来了,我在我的java代码中使用了spring数据来检索结果。

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);

但是,我无法检索特定测试运行的结果。有人可以帮我解决这个问题吗?

谢谢。

最佳答案

如果您想获得“testRuns.testRun”= 1,则不需要 $elemMatch。没有第二个条件。请引用 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);

关于java - 如何在 spring 数据中使用 elemMatch 为嵌套对象从 mongodb 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37491533/

相关文章:

java - 从大量 Swing 文本字段收集数据

java - Spring Hateoas中如何通过注解设置资源关系?

java - 如何卸载 Scala Eclipse 插件?

java - 无法从 spring mvc 中的属性文件读取

javascript - 如何在 Mongoose 模型中定义方法?

java - 方阵程序

java - 图片IO : cannot read image with CMYK color space

php - Laravel Mongodb 带日期的原始 mongo 查询

node.js - mongodb使用更新来避免竞争条件,当字段为空数组时更新错误

java - 有没有办法在 MongoDB 客户端中使用泛型?