2017-05-20 97 views
0

我想知道,我试图更新有一些特性,如使用Spring数据的MongoDB

{ 
    "id": "591fcd33f8bb03598ec34f70", 
    "name": null, 
    "username": "abc", 
    "emailId": "[email protected]", 
    "interestedFlag": 1, 
    "mobNo": "xxxxxxxxxx", 
    "userActiveFlag": 1, 
    "address": "1", 
    "city": "abx", 
    "state": "up", 
    "profileImage": [ 
    {} 
    ], 
    "joinedOn": null, 
    "modifiedOn": null, 
    "lastVisited": null, 
    "tempPassword": "1234567", 
    "sex": null, 
    "metaDataMap": {}, 
    "dob": null 
} 
文件 集合user一个或属性修改文档的某些属性

假设我想更新user名称而且如果我使用以下命令运行save

userRepository.save(userEntity); 

它改变了我的用户为:

{ 
    "id": "591fcd33f8bb03598ec34f70", 
    "name": "New Name", 
    "username": null, 
    "emailId": null, 
    "interestedFlag": null, 
    "mobNo": null, 
    "userActiveFlag": null, 
    "address": null, 
    "city": null, 
    "state": null, 
    "profileImage": null, 
    "joinedOn": null, 
    "modifiedOn": null, 
    "lastVisited": null, 
    "tempPassword": null, 
    "sex": null, 
    "metaDataMap": {}, 
    "dob": null 
} 

但理想我想改变我的用户名只

用户控制器是:

@PATCH 
@Path("/changepassword/{userId}") 
@Consumes("application/json") 
public User changeName(@PathParam("userId") String userId, final User user) { 
    userService.changePassword(user); 
    return user; 
} 

serviceImpl是:

@Override 
public User changeName(User user){ 
    User userEntity = userRepository.findById(user.getId()); 
    userEntity.setName(user.getName()); 
    return userRepository.save(userEntity); 
} 

mongoRepository是:

public interface UserRepository extends MongoRepository<User, String> 

请用我的Spring-data-mongodb来帮助我实现这个目标。

+0

这将有所帮助。 http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/#mongodb-template-update – Veeram

+0

你必须使用MongoTemplate – pvpkiran

回答

1

正如家伙在评论中写的,你应该为此创建一个自定义更新方法。

首先创建一个接口,用于自定义的方法:

interface UserRepositoryCustom { 
    void updateName(String userId, String newName); 
} 

然后将其添加到UserRepository

public interface UserRepository extends MongoRepository<User, String>, UserRepositoryCustom 

与实现它:

public class UserRepositoryImpl implements UserRepositoryCustom { 

    private final MongoTemplate mongoTemplate; 

    public UserRepositoryImpl(@Autowired final MongoTemplate mongoTemplate) { 
     this.mongoTemplate = mongoTemplate; 
    } 

    @Override 
    public void updateName(final String id, final String newName) { 
     mongoTemplate 
       .updateFirst(Query.query(Criteria.where(Entity.Meta.ID).is(id)), 
         Update.update("name", newName), User.class); 
    } 
} 

你也应该始终只更新您要更新的字段。 Save方法应该很少使用。

相关问题