sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-Escape prickar '.' i kartnyckel]

När du använder Spring Data MongoDB får du en instans av:org.springframework.data.mongodb.core.convert.MappingMongoConverter som har mapKeyDotReplacement inställd på null som standard - det är därför du får ett undantag.

Du måste antingen skapa din egen instans av org.springframework.data.mongodb.core.convert.MappingMongoConverter eller ändra bara befintlig instans med hjälp av dess leverantörssättermetod:

/**
 * Configure the characters dots potentially contained in a {@link Map} shall be replaced with. By default we don't do
 * any translation but rather reject a {@link Map} with keys containing dots causing the conversion for the entire
 * object to fail. If further customization of the translation is needed, have a look at
 * {@link #potentiallyEscapeMapKey(String)} as well as {@link #potentiallyUnescapeMapKey(String)}.
 * 
 * @param mapKeyDotReplacement the mapKeyDotReplacement to set
 */
public void setMapKeyDotReplacement(String mapKeyDotReplacement) {
    this.mapKeyDotReplacement = mapKeyDotReplacement;
}

I MongoDB behandlas prick alltid som ett specialtecken, så om du undviker det kommer du sannolikt att spara lite annan huvudvärk i framtiden.

EDIT:För att åsidosätta standard MappingMongoConverter lägg till följande böndeklaration:

  @Bean
  public MappingMongoConverter mongoConverter(MongoDbFactory mongoFactory) throws Exception {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
    MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
    mongoConverter.setMapKeyDotReplacement(".");

    return mongoConverter;
  }


  1. mongodb och autentisera och pass i node.js

  2. En översikt över fältnivåkryptering på klientsidan i MongoDB

  3. MongoDB $substrCP

  4. Hur fungerar Mongooses spara-återuppringning?