我无法找到有关此问题的单个网页或其他帖子。因此,我在这里发帖。
在我存储到我的mongodb的文件中,我有这些东西出现了:
"itemModifiers" : [
{
"val$implicitModifierString" : "16% increased Spell Damage",
"modifierName" : "16% increased Spell Damage"
}
]
val$implicitModifierString
实际上是我的Java代码中的一个变量,它没有设置为ItemModifiers.class
实例。基本上,当我在我的类中设置一个变量存储到MongoDb时,我用来设置该变量的任何变量或对象也会存储到数据库中(或者至少对我来说是这样的!)。
以下是该过程的示例代码示例(如果您讨厌地图,抱歉;这里不太相关。):
public ItemModifier deriveModifier(final String modifier) {
for (Pattern outerKey : tierMap.keySet()) {
if (outerKey.matcher(modifier).matches()) {
HashMap<Pattern, ItemModifierTier> innerMap = tierMap.get(outerKey);
for (Pattern innerKey : innerMap.keySet()) {
if (innerKey.matcher(modifier).matches()) {
Matcher innerMatcher = innerKey.matcher(modifier);
Double[] tierValues = new Double[innerMatcher.groupCount()];
innerMatcher.find();
for (int i = 1; i <= innerMatcher.groupCount(); i++) {
tierValues[i - 1] = Double.valueOf(innerMatcher.group(i));
}
return new ItemModifier() {{
setModifierName(modifier);
setModifierTerm(termMap.get(outerKey.pattern()));
setModifierTier(innerMap.get(innerKey));
setModifierType(itemModifierType);
setModifierValues(tierValues);
}};
}
}
}
}
return null;
}
这里是ItemModifier类(故意为每个字段编制索引,因为它们都可以通过服务查询;我还没有创建复合索引,但计划一旦手头的问题被排序):
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"modifierName",
"modifierTerm",
"modifierType",
"modifierTier",
"modifierValues",
"modifierAverage"
})
public class ItemModifier {
@Indexed
@JsonProperty("modifierName")
private String modifierName;
@Indexed
@JsonProperty("modifierTerm")
private String modifierTerm;
@Indexed
@JsonProperty("modifierType")
private ItemModifierType modifierType;
@Indexed
@JsonProperty("modifierTier")
private ItemModifierTier modifierTier;
@Indexed
@JsonProperty("modifierValues")
private Double[] modifierValues;
@Indexed
@JsonProperty("modifierAverage")
private Double modifierAverage;
public ItemModifier() {
}
public String getModifierName() {
return modifierName;
}
public void setModifierName(String modifierName) {
this.modifierName = modifierName;
}
//... the other getters/setters
}
此ItemModifiers.class
保存在ItemDocument.class
内,只需调用mongoOperations.insert(itemDocumentInstance);
即可存储到mongo数据库。
如果重要,这是我的mongoConfig.xml:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<mongo:mongo host="127.0.0.1" port="27017"/>
<mongo:db-factory dbname="public-stash-api"/>
<bean id="mappingContext"
class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/>
<bean id="defaultMongoTypeMapper"
class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey">
<null/>
</constructor-arg>
</bean>
<bean id="mappingMongoConverter"
class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
<constructor-arg name="mappingContext" ref="mappingContext"/>
<property name="typeMapper" ref="defaultMongoTypeMapper"/>
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
<constructor-arg name="mongoConverter" ref="mappingMongoConverter"/>
</bean>
</beans>
提前感谢您的帮助!
答案 0 :(得分:0)
你正在将杰克逊与MongoDB混合在一起。 MongoDB使用文档这一事实并不意味着它使用的是Jackson。 MongoDB以BSON(二进制JSON)格式存储文档,但您无法使用Jackson注释自定义文档的存储方式。
出于这个目的,有Spring Data MongoDB注释(如org.springframework.data.mongodb.core.mapping.Field
)。您实际上在代码中使用了其中一个(org.springframework.data.mongodb.core.index.Indexed
)。