如何使用 Spring Mongo db 将对象添加到现有列表?

How to add an object to existing List using Spring Mongo db?

这是class一个

@Document
class User{
private String id ;
private String name;
@Dbref
private List<Socity> Socitys;
}

这是class社会

@Document
class Socity{
private String id ;
private String name;
}

这是添加用户功能

public User addUser(User user) {
    List<Socity> socity = new ArrayList<>();
    user.setsocitys (socity );
    return  userRepository.save(user);
}

我想为现有用户添加一个社会 我试过了,但没用

public static void main(String[] args) {
    ApplicationContext ctx  = SpringApplication.run (App.class, args);
    SocityDao SDao = ctx.getBean(SocityDao .class);
    UserRepository userRepository = ctx.getBean(UserRepository.class);

    User u = userRepository.findOne("");
    Socity s = new Socity("soc1");
    SDao .addSocity(e);
    u.getSocitys().add(e);

}

这是休息服务

@RequestMapping(value = "up/{id}", method = RequestMethod.POST ,produces = 
"application/json")
public User addSocityToUser(@RequestBody Socity, @PathVariable  String id) 
{

     return SocityDAO.addSocityToUser(e, id);
}

在您的代码末尾添加 userRepository.save(u) 以将您的更改保存到数据库。

只要它作为一个ID(因为它是一个持久对象)它就会被更新。如果它没有 ID,它将作为一个新对象保存在数据库中。

看起来你在添加新社交后忘记保存用户。请检查我的更新

@Document
public class Socity {
    private String id ;
    private String name;
}

@Document
public class User {
    private String id;
    private String name;
    @DBRef
    private List<Socity> socitys = new ArrayList<>();
}

那么您不需要使用您的 addUser() 方法。当你想添加新用户时,只需使用

 userRepository.save(user);

您还需要两个存储库

public interface SocityRepository extends MongoRepository<Socity, String> {
}

public interface UserRepository extends MongoRepository<User, String> {
    }

以及您在 main 方法中需要的内容

public static void main(String[] args) {
ApplicationContext ctx  = SpringApplication.run (App.class, args);
UserRepository userRepository = ctx.getBean(UserRepository.class);
SocityRepository socityRepository = ctx.getBean(SocityRepository.class);

User u = userRepository.findOne("");
Socity s = socityRepository.save(new Socity("soc1"));
u.getSocitys().add(s);
userRepository.save(u);

}

使用MongoTemplate 编写更新查询并使用Push 功能添加到列表总是更好。

@Autowired
private MongoTemplate mongoTemplate;

 function(String id, Socity socity){
     Query query = new Query(Criteria.where("id").is(id));                  
     Update update = new Update();          
     update.push("Socitys", socity);
     mongoTemplate.updateFirst(query, update, User.class);
}