Java Spring MongoDB插入不需要的对象

Java Spring MongoDB插入不需要的对象,java,spring,mongodb,Java,Spring,Mongodb,我找不到任何关于这个问题的网页或其他帖子。因此,我在这里发帖 在我存储到mongodb的文档中,我显示了以下内容: "itemModifiers" : [ { "val$implicitModifierString" : "16% increased Spell Damage", "modifierName" : "16% increased Spell Damage" } ] val$implicitModifierString实际上是我的Java代码中的一个变量,它

我找不到任何关于这个问题的网页或其他帖子。因此,我在这里发帖

在我存储到mongodb的文档中,我显示了以下内容:

"itemModifiers" : [
  {
    "val$implicitModifierString" : "16% increased Spell Damage",
    "modifierName" : "16% increased Spell Damage"
  }
]
val$implicitModifierString
实际上是我的Java代码中的一个变量,它没有设置为
ItemModifiers.class
实例。基本上,当我在我的类中设置一个存储到MongoDb的变量时,我用来设置该变量的任何变量或对象也会存储到数据库中(或者至少在我看来是这样的!)

下面是流程的一些示例代码(如果您不喜欢地图,很抱歉;这里不太相关):

这个
ItemModifiers.class
保存在
ItemDocument.class
中,只需调用
mongoperations.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>


提前感谢您的帮助

你把Jackson和MongoDB混在一起了。MongoDB使用文档并不意味着它在使用Jackson。MongoDB以BSON(二进制JSON)格式存储文档,但不能使用Jackson注释自定义文档的存储方式


SpringDataMongoDB注释(比如
org.springframework.Data.MongoDB.core.mapping.Field
)就是为了这个目的。实际上,您在代码中使用了其中一个(
org.springframework.data.mongodb.core.index.index
)。

事实证明,这就是罪魁祸首:

return new ItemModifier() {{
  setModifierName(modifier);
  setModifierTerm(termMap.get(outerKey.pattern()));
  setModifierTier(innerMap.get(innerKey));
  setModifierType(itemModifierType);
  setModifierValues(tierValues);
}};

静态实例化是导致奇怪的
val$inputVariables
通过Spring持久化到Mongo文档中的原因。

是否有任何类将Map作为属性?尤其是ItemModifierMember变量的复合对象都是Enum、Double[]、Double或String。没有地图,这是一个很好的观点。我已经纠正了这一点(将JsonProoerty(“…”)更改为字段(“…”),但结果没有更改。
<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>
return new ItemModifier() {{
  setModifierName(modifier);
  setModifierTerm(termMap.get(outerKey.pattern()));
  setModifierTier(innerMap.get(innerKey));
  setModifierType(itemModifierType);
  setModifierValues(tierValues);
}};