如何将一个字段作为字符串存储在一个集合中,并作为对象存储在另一个集合中
我需要使用两个转换器将对象存储到mongoDB中。
class Comment {
User user; //Store it into the database as a String userName;
String commentText;
//getters, setters
}
class User {
String userName;
// other fields.
// getters, setters
}
这就是我所需要的。 收藏集评论
{
"_id" : "someValidObjectId_1",
"commentText" : "ABC",
// Plain String, not n object.
"user" : "user1"
},
{
"_id" : "someValidObjectId_2",
"commentText" : "EFG",
"user" : "user2"
}
收藏用户
{
"_id" : "serId_1",
"userName" : "user1",
// other fields
},
{
"_id" : "serId_2",
"userName" : "user2",
// other fields
}
为此,我使用Spring Converters。
import org.springframework.core.convert.converter.Converter;
// instruct Mongo to store User as plain string instead of nested object
public final static class UserWriteConverter implements Converter<User, String> {
@Override
public String convert(final User user) {
return user.getUserName();
}
}
public static final class UserReadConverter implements Converter<String, User> {
@Override
public User convert(final String userString) {
// Creates an new Object with all fields empty, except userName.
return User.of(userString);
}
}
现在,我的问题
如何将具有所有字段的用户存储到集合 user 中,并作为字符串存储到 Comment 的字段用户中。
注意,我不能更改
class Comment {
// The type must be user!!!
User user
}
我的解决方案
例如,使用另一个类
class Comment {
UserName user;
}
Then add a converter to convert **UserName** into a String for **comment**.
我也读了ConditionalGenericConverter
有时,您只希望在特定条件成立的情况下执行Converter。例如,如果目标字段上存在特定的注释,则可能只想执行Converter。或者,您可能只想在目标类上定义了特定方法(例如静态valueOf方法)的情况下执行Converter。 ConditionalGenericConverter是GenericConverter的子接口,可让您定义此类自定义匹配条件