ric*_*oon 17 java spring mongodb spring-data spring-data-mongodb
我们如何在Spring Data Mongo中选择特定字段.我尝试以下,但我从投例外Foo来String.
运用 @Query
@Query(value="{path : ?0}", fields="{path : 0}")
String findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)
非 @Query
String findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)
这是文档模型
@Document(collection = "foo")
public class Foo {
String name, path;
…
}
Run Code Online (Sandbox Code Playgroud)
Oli*_*ohm 22
MongoDB仅返回标准查询的JSON文档.你想看到的东西可以通过仍然返回来实现List<Foo>.该fields属性@Query将仅返回设置为1的字段.
@Query(value="{ path : ?0}", fields="{ path : 0 }")
List<Foo> findByPath(String path);
Run Code Online (Sandbox Code Playgroud)
我们通常建议为此引入专用的DTO,以防止部分填充的Foo实例save(…)依次被传递.
另一个选择是使用聚合框架,但更复杂.
小智 14
您可以使用
Query query = new Query();
query.fields().include("path");
Run Code Online (Sandbox Code Playgroud)
小智 14
您可以使用
public interface PersonRepository extends MongoRepository<Person, String>
@Query(value="{ 'firstname' : ?0 }",fields="{ 'firstname' : 1, 'lastname' : 1}")
List<Person> findByThePersonsFirstname(String firstname);
}
Run Code Online (Sandbox Code Playgroud)
有关spring数据文档的更多信息
小智 6
您可以使用以下查询来获取特定字段。
@Query(fields="{path : 1}")
Foo findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)
数据库中存在的记录
{
"name" : "name2",
"path" : "path2"
},
{
"name" : "name3",
"path" : "path3"
}
Run Code Online (Sandbox Code Playgroud)
如果 path=Path3,下面的查询将返回 Foo 对象
{
"name": null,
"path": "path3"
}
Run Code Online (Sandbox Code Playgroud)
我们需要使用 fieldName:1 指定必填字段,如果不需要,则使用 0 指定它。