相关疑难解决方法(0)

Spring Data的MongoTemplate和MongoRepository有什么区别?

我需要编写一个应用程序,我可以使用spring-data和mongodb进行复杂的查询.我一直在使用MongoRepository开始,但在复杂的查询中苦苦寻找示例或实际理解语法.

我在谈论这样的查询:

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    List<User> findByEmailOrLastName(String email, String lastName);
}
Run Code Online (Sandbox Code Playgroud)

或者使用基于JSON的查询,我尝试通过反复试验,因为我没有正确的语法.即使在阅读了mongodb文档(由于语法错误而导致的非工作示例).

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    @Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
    List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
} 
Run Code Online (Sandbox Code Playgroud)

阅读完所有文档后,似乎mongoTemplate记录得更好MongoRepository.我指的是以下文档:

http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/

你能告诉我什么更方便,更强大吗?mongoTemplate还是MongoRepository?两者是否同样成熟,或者其中一个缺少比另一个更多的功能?

java spring mongodb spring-data spring-data-mongodb

79
推荐指数
3
解决办法
6万
查看次数

Spring Data MongoDB 聚合 - 在投影中重命名 _id

在 mongo (3.6) shell 中,我可以执行以下聚合来投影并将“_id”重命名为其他名称:

db.collection.aggregate([
  { $group : { _id : ... },
  { $project : {   '_id': 0,        // exclude the id field
                   'name' : '$_id', // project the "old" id value to the "name" field
                   ...
               }
  }
])
Run Code Online (Sandbox Code Playgroud)

我需要使用 spring-data-mongo (通过 Spring Boot 2.3.1)来翻译它。我可以使用以下 ProjectionOperation 排除 id 字段:

project().andExclude("_id")
Run Code Online (Sandbox Code Playgroud)

但到目前为止我还无法重命名 id 字段。以下均无效:

这不应该那么难,但我不知道我错过了什么。


编辑:数据样本和完整的聚合管道以重现故障

并附有以下文件:

{ 
    "_id" : ObjectId("5a0c7a3135587511c9247db4"), 
    "_class" : "task", 
    "category" : "green", 
    "status" : "OK"
}
{ 
    "_id" …
Run Code Online (Sandbox Code Playgroud)

aggregation-framework spring-data-mongodb

8
推荐指数
1
解决办法
7360
查看次数