如何只检索嵌套文档 mongodb 和 spring 引导
How to only retrieve the nested document mongodb and spring boot
我有以下文档和嵌套文档。
class Foo {
public String name;
public String description;
public LocalDateTime someDate;
}
@Document
class Bar {
@Id
public String id;
public String details;
public List<Foo> foos;
}
我的自定义查询如下所示:
Query query = new Query(
Criteria.where("foo.name").is("Some name").and("id").is("myId")
);
List<Bar> resultList = operations.find(query, Bar.class);
我想检索匹配 "Some name" 的单个 Foo 文档。而不是带有 Foo 列表的 Bar 文档。我该怎么做?
谢谢
如果您的 Foo
class 在数据库中没有集合并且它嵌入在 Bar
中,如您在问题中所述。您将需要创建一个自定义存储库以获取您要查找的内容。
interface BarRepository extends BarCustomRepository, MongoRepository<Bar, String> {
}
interface BarCustomRepository {
Foo findFooByName(String fooName);
}
class BarRepositoryImpl implements BarCustomRepository {
@Autiwired
private MongoTemplate mongoTemplate;
@Override
Foo findFooByName(String fooName) {
Bar bar = mongoTemplate.findOne(new Query ( Criteria.where("foos.name").is(fooname)), Bar.class);
Foo foo = bar.getFooByName(fooName);// implement this method in your Bar class. // to Get a foo by fooName from foos list
return foo;
}
}
希望对您有所帮助。
我有以下文档和嵌套文档。
class Foo {
public String name;
public String description;
public LocalDateTime someDate;
}
@Document
class Bar {
@Id
public String id;
public String details;
public List<Foo> foos;
}
我的自定义查询如下所示:
Query query = new Query(
Criteria.where("foo.name").is("Some name").and("id").is("myId")
);
List<Bar> resultList = operations.find(query, Bar.class);
我想检索匹配 "Some name" 的单个 Foo 文档。而不是带有 Foo 列表的 Bar 文档。我该怎么做? 谢谢
如果您的 Foo
class 在数据库中没有集合并且它嵌入在 Bar
中,如您在问题中所述。您将需要创建一个自定义存储库以获取您要查找的内容。
interface BarRepository extends BarCustomRepository, MongoRepository<Bar, String> {
}
interface BarCustomRepository {
Foo findFooByName(String fooName);
}
class BarRepositoryImpl implements BarCustomRepository {
@Autiwired
private MongoTemplate mongoTemplate;
@Override
Foo findFooByName(String fooName) {
Bar bar = mongoTemplate.findOne(new Query ( Criteria.where("foos.name").is(fooname)), Bar.class);
Foo foo = bar.getFooByName(fooName);// implement this method in your Bar class. // to Get a foo by fooName from foos list
return foo;
}
}
希望对您有所帮助。