如何使用 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);
}
这是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);
}