如何使用 mongoTemplate 检索特定列表对象?
How to retrieve a particular list object using mongoTemplate?
我有一个 mongo 文档,如下所示:
{
"personId" : ObjectId("6138cf5b5d79d616c28b8e6c"),
"address" : [
{
"addrId": "123",
"Street" : "abc"
},
{
"addrId": "456",
"Street" : "xyz"
}]
}
现在我想检索 addrId 为 123 的地址对象,personId - 6138cf5b5d79d616c28b8e6c。我有以下接受 personId 和 addrId 的 java 方法。我如何使用 mongoTemplate
实现
public Address getAddrObject(String personId, String addrId) {
// need logic to return addr object with passed addrId
}
这样好吗:
public Address getAddrObject(String personId, String addrId) {
Query query = new Query();
query.addCriteria(Criteria.where("personId").is(personId));
Person person = mongoTemplate.findOne(query, Person.class);
for(Address add : person.getAddress()){
if(add.getAddrId().equals(addrId)){
return add;
}
}
return null;
}
您也可以通过添加地址 ID 条件来改进查询。
query.addCriteria(new Criteria().andOperator(Criteria.where("personId").is(personId),
Criteria.where("address.addrId").is(addrId)));
这也将 return 只有具有所需地址 ID 的文档。
这符合我的预期:
Query query = new Query();
query.addCriteria(Criteria.where("personId").is(personId));
query.addCriteria(Criteria.where("addrId").is(addrId));
query.fields().include("address.$");
Person person = mongoTemplate.findOne(query, Person.class);
if(person!=null && person.getAddress()!=null && person.getAddress().size() > 0) {
return person.getAddress().get(0);
}
return null;
我有一个 mongo 文档,如下所示:
{
"personId" : ObjectId("6138cf5b5d79d616c28b8e6c"),
"address" : [
{
"addrId": "123",
"Street" : "abc"
},
{
"addrId": "456",
"Street" : "xyz"
}]
}
现在我想检索 addrId 为 123 的地址对象,personId - 6138cf5b5d79d616c28b8e6c。我有以下接受 personId 和 addrId 的 java 方法。我如何使用 mongoTemplate
实现public Address getAddrObject(String personId, String addrId) {
// need logic to return addr object with passed addrId
}
这样好吗:
public Address getAddrObject(String personId, String addrId) {
Query query = new Query();
query.addCriteria(Criteria.where("personId").is(personId));
Person person = mongoTemplate.findOne(query, Person.class);
for(Address add : person.getAddress()){
if(add.getAddrId().equals(addrId)){
return add;
}
}
return null;
}
您也可以通过添加地址 ID 条件来改进查询。
query.addCriteria(new Criteria().andOperator(Criteria.where("personId").is(personId),
Criteria.where("address.addrId").is(addrId)));
这也将 return 只有具有所需地址 ID 的文档。
这符合我的预期:
Query query = new Query();
query.addCriteria(Criteria.where("personId").is(personId));
query.addCriteria(Criteria.where("addrId").is(addrId));
query.fields().include("address.$");
Person person = mongoTemplate.findOne(query, Person.class);
if(person!=null && person.getAddress()!=null && person.getAddress().size() > 0) {
return person.getAddress().get(0);
}
return null;