我在
下面有一个简单的节点@Document("users")
public class User {
@Id // db document field: _key
private String id;
@ArangoId // db document field: _id
private String arangoId;
private String firstName;
private String lastName;
private String country;
public User() {
super();
}
public User(String id) {
this.id = id;
}
public User(String id, String country) {
this.id = id;
this.country = country;
}
// getter & setter
@Override
public String toString() {
return "User [id=" + id + ", name=" + firstName + ", surname=" + lastName + "]";
}
public String getId() {
return id;
}
}
这里是存储库类,但是方法getListOfCountryAndNumUsers返回null,即使我已经将不同国家的用户插入到数据库中。
public interface UserRepository extends ArangoRepository<User, String> {
@Query("FOR u IN users COLLECT country = u.country WITH COUNT INTO length RETURN
{"country" : country, "count" : length }")
Iterable<CountryAndNumUsers> getListOfCountryAndNumUsers();
}
我认为问题可能与查询注释中查询的语法有关。我在arangodb文档的spring data arangodb部分中没有看到任何使用collect操作的直接示例,但是我在"高级操作"一节中看到了collect操作。arangoDb文档在这里
请帮助。谢谢。
!所以我发现了我的错误。是在一门课上,我没有加这个问题。这是getListOfCountryAndNumUsers()方法的返回对象的类即CountryAndNumUsers类。
public class CountryAndNumUsers {
private String country;
private Integer numberOfUsers;
public CountryAndNumUsers(String country, Integer numberOfUsers) {
this.country = country;
this.numberOfUsers = numberOfUsers;
}
public String getCountry() {
return country;
}
public Integer getNumberOfUsers() {
return numberOfUsers;
}
}
因此存在映射不匹配,因为查询返回具有不同字段名称的对象。我更改了下面的查询,以便它匹配
@Query("FOR u IN users COLLECT country = u.country WITH COUNT INTO length RETURN {"country" : country, "numberOfUsers" : length }")