2017-05-20 99 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方法應該很少使用。

相關問題