当前位置: 首页 > 知识库问答 >
问题:

使用Spring data mongoDB修改文档的某些属性

邬承悦
2023-03-14

我想知道我正在尝试更新集合用户文档的一个或两个属性,这些属性包括

{
  "id": "591fcd33f8bb03598ec34f70",
  "name": null,
  "username": "abc",
  "emailId": "abc@gmail.com",
  "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
}

假设我只想更新用户名,如果我正在使用以下命令运行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;
}

我的服务Impl是:

@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以正确的方式实现这一点。

共有1个答案

艾子石
2023-03-14

正如人们在评论中所写,您应该为此创建一个自定义更新方法。

首先为自定义方法创建接口:

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

然后将其添加到用户存储库:

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);
    }
}

此外,您应该始终只更新要更新的字段。保存方法应该很少使用。

 类似资料:
  • 本文向大家介绍SpringDataMongoDB多文档事务的实现,包括了SpringDataMongoDB多文档事务的实现的使用技巧和注意事项,需要的朋友参考一下 一、安装MongoDB4.0.3(××) 1.1、官方安装文档 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 1.2、tar.gz包下载地址 h

  • 主要内容:1. 使用fauxton更新(编辑)文档,2. CouchDB使用cURL工具更新文档在本篇文章中,我们来学习如何编辑/修改 CouchDB 数据库中的文档。编辑/修改 CouchDB 数据库中的文档有两种方法,下面分别来看看如何操作。 1. 使用fauxton更新(编辑)文档 打开Fauxton url:http://127.0.0.1:5984/_utils 在创建文档后,还可以更新/更改/编辑文档。首先打数据库概览,里边有文档列表,如下表所示 - 点击想要修改的文档,例如点击

  • Beautiful Soup的强项是文档树的搜索,但同时也可以方便的修改文档树 修改tag的名称和属性 在 Attributes 的章节中已经介绍过这个功能,但是再看一遍也无妨. 重命名一个tag,改变属性的值,添加或删除属性: soup = BeautifulSoup('<b>Extremely bold</b>') tag = soup.b tag.name = "blockquote" t

  • DOM 修改是创建“实时”页面的关键。 在这里,我们将会看到如何“即时”创建新元素并修改现有页面内容。 例子:展示一条消息 让我们使用一个示例进行演示。我们将在页面上添加一条比 alert 更好看的消息。 它的外观如下: <style> .alert { padding: 15px; border: 1px solid #d6e9c6; border-radius: 4px; co

  • Beautiful Soup的强项是文档树的搜索,但同时也可以方便的修改文档树 修改tag的名称和属性 在 Attributes 的章节中已经介绍过这个功能,但是再看一遍也无妨. 重命名一个tag,改变属性的值,添加或删除属性: soup = BeautifulSoup('<b class="boldest">Extremely bold</b>') tag = soup.b tag.name

  • 本文向大家介绍MongoDB修改、删除文档的域属性实例,包括了MongoDB修改、删除文档的域属性实例的使用技巧和注意事项,需要的朋友参考一下 由于本博使用的博客程序是边开发边使用的,所以开发过程中动态创建了某些现在不需要的属性 MongoDB 是无 Schema 的,不像关系数据库那样列属性定义在表而非记录中,MongoDB 的集合中的每个文档可以拥有各自不同的域属性。 MongoDB 中使用