Я прочитал руководство по mongo 3.6. В нем есть пример json - The 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 для запроса этого документа, используя приведенный выше экспресс:
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?
спасибо.