Spring Mongo映射变量数据

时间:2014-12-30 12:21:16

标签: spring mongodb spring-mongo spring-mongodb

我正在为我的项目使用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?!

(什么是最好的方法)/(你会如何)处理这样的事情?

2 个答案:

答案 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/

的详细信息,请参阅