更新操作会添加新数组,而不是添加数组元素



我的控制器:

@RequestMapping(value = "/{id}/giveFacilitiesAccess", method = RequestMethod.POST)
public Object giveFacilityAccessToAnotherUser(@PathVariable("id") String userId)
{
return userService.giveFacilitiesAccessToAnotherUser(userId);
}

我的服务:

@Override
public Object giveFacilitiesAccessToAnotherUser(String id)
{
String userId = getLoggedInUserId();
User u = userDao.findById(userId);
List<String> facilitiesAccess = u.getFacilitiesAccess();
return userDao.giveFacilitiesAccessToAnotherUser(id,facilitiesAccess);
}

我的刀:

@Override
public Object giveFacilitiesAccessToAnotherUser(String userId, List<String>facilitiesAccess)
{
Query query = new Query();
query.addCriteria(Criteria.where("id").is(userId));
Update update = new Update().addToSet("facilitiesAccess.",facilitiesAccess);
mongoTemplate.updateFirst(query, update, User.class);
return null;
}

更新后:"便利访问":["5f0996f792691b1b68671da3",["5f40998ba92691d1b68671da 4"]]

It's updating like array inside another array, but i need in this format:
"facilitiesAccess":["5f0996f792691d1b68671da3","5f0998ba92691d1b68671da4"]

更新使用返回Update.AddToSetBuilderaddToSet(String key)语法,然后在生成器上应用each(Object... values)方法,以返回Update对象。

Update update = new Update().addToSet("facilitiesAccess").each(facilitiesAccess);

您需要使用下面的Each like

@Override
public Object giveFacilitiesAccessToAnotherUser(String userId, List<String>facilitiesAccess)
{
Query query = new Query();
query.addCriteria(Criteria.where("id").is(userId));
Update update = new Update().addToSet("facilitiesAccess.",new Each(facilitiesAccess));
mongoTemplate.updateFirst(query, update, User.class);
return null;
}

最新更新