【问题标题】:mongo template to query a array of document用于查询文档数组的 mongo 模板
【发布时间】:2018-05-15 07:00:02
【问题描述】:

我已经阅读了mongo手册3.6。它有一个示例json--bios ExampleCollection,像这样:

{
    "_id" : 1,
    "name" : {
        "first" : "John",
        "last" : "Backus"
    },
    "birth" : ISODate("1924-12-03T05:00:00Z"),
    "death" : ISODate("2007-03-17T04:00:00Z"),
    "contribs" : [
        "Fortran",
        "ALGOL",
        "Backus-Naur Form",
        "FP"
    ],
    "awards" : [
        {
            "award" : "W.W. McDowell Award",
            "year" : 1967,
            "by" : "IEEE Computer Society"
        },
        {
            "award" : "National Medal of Science",
            "year" : 1975,
            "by" : "National Science Foundation"
        },
        {
            "award" : "Turing Award",
            "year" : 1977,
            "by" : "ACM"
        },
        {
            "award" : "Draper Prize",
            "year" : 1993,
            "by" : "National Academy of Engineering"
        }
    ]
}

根据手册,查询文档数组,QL 如下:

db.bios.find(
   {
      awards: {
                $elemMatch: {
                     award: "Turing Award",
                     year: { $gt: 1980 }
                }
      }
   }
)

我使用spring mongo模板通过上面的express查询这个文档:

Query query = new Query();
query.addCriteria( Criteria.where("awards").elemMatch( 
Criteria.where("award").is("Turing Award").and("year").gt(new Integer(1980))) );
List<TestEntity> list = mongoTemplate.find(query, TestEntity.class, "testentity");
Assert.assertTrue(!list.isEmpty());
//testentity is a collection in my local db to store example json text.

我不明白为什么结果列表是空的。我调试最后一条语句并观察查询变量。它的字符串格式是:

Query: { "awards" : { "$elemMatch" : { "award" : "Turing Award" , "year" : { "$gt" : 1980}}}}, Fields: null, Sort: null

然后复制

{ "awards" : { "$elemMatch" : { "award" : "Turing Award" , "year" : { "$gt" : 1980}}}}

到robo 3T mongo客户端工具查询。它查询 3 个结果。 java代码是如何工作的?
谢谢。

【问题讨论】:

  • 您没有任何与查询匹配的元素。
  • 如果您确实显示了与结果匹配的文档,这将有所帮助。查询看起来不错,所以我只能想象您的代码正在连接到与您运行查询以进行测试的位置不同的地方。
  • 样本是整个 BIOS json 文本的 sn-p,只显示它的结构。请参阅docs.mongodb.com/manual/reference/bios-example-collection 我想知道为什么 java 代码不起作用,但在 mongo 客户端完成的查询相同
  • 正如@GaganChouhan 所说,现在可以了。我在 application.properties 中配置的另一个数据库中查询。 db 集合只有一个文档,并且与此查询不匹配。谢谢。

标签: java mongodb mongotemplate


【解决方案1】:

尝试改变

{
    "award" : "Turing Award",
    "year" : 1977,
    "by" : "ACM"
},

到

 {
    "award" : "Turing Award",
    "year" : 1981,
    "by" : "ACM"
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2020-06-11
    • 2017-06-10
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多