我正在为我的项目使用Spring Data MongoDB。我使用包含大量数据的mongo数据库,我想在我的Java应用程序中映射这些数据。 我遇到的问题是一些时间上的数据有不同的结构。
例如, sport_name 现在是一个数组,而在某些旧记录中是一个字符串:
sport_name: "Soccer" // Old data
sport_name: [ // Most recent entries
{
"lang" : "en",
"val" : "Soccer"
},
{
"lang" : "de",
"val" : "Fussball"
}
]
以下是我现在所拥有的:
@Document(collection = "matches")
public class MatchMongo {
@Id
private String id;
private ??? sport_name; // Best way?!
(什么是最好的方法)/(你会如何)处理这样的事情?
答案 0 :(得分:1)
如果旧数据可以被视为“en”语言,则可以使用单独的结构来存储本地化文本:
class LocalName {
private String language;
private String text;
// getters/setters
}
因此映射对象将存储本地化值的集合:
public class MatchMongo {
// it can also be a map (language -> text),
// in this case we don't need additional structure
private List<LocalName> names;
}
这种方法可以与自定义转换器结合使用,将纯字符串用作“en”语言环境值:
public class MatchReadConverter implements Converter<DBObject, MatchMongo> {
public Person convert(DBObject source) {
// check what kind of data located under "sport_name"
// and define it as "en" language text if it is an old plain text
// if "sport_name" is an array, then simply convert the values
}
}
详细描述了here自定义映射。
答案 1 :(得分:1)
可能你可以编写一个实用程序类,它将获取sport_name不是数组的所有数据,并将元素sport_name更新为array。但这一切都取决于你拥有的数据量。
你可以使用query {“sport_name”:{$ type:2}},这里2代表String。 有关$ type:http://docs.mongodb.org/manual/reference/operator/query/type/
的详细信息,请参阅