sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB-Escape tečky '.' v klíči mapy]

Při použití Spring Data MongoDB získáte instanci:org.springframework.data.mongodb.core.convert.MappingMongoConverter který má mapKeyDotReplacement implicitně nastaveno na null – proto dostáváte výjimku.

Musíte buď vytvořit vlastní instanci org.springframework.data.mongodb.core.convert.MappingMongoConverter nebo stačí upravit existující instanci pomocí metody jejího poskytovatele nastavení:

/**
 * 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;
}

V MongoDB se s tečkou vždy zachází jako se speciální postavou, takže pokud se jí vyhnete, s největší pravděpodobností si v budoucnu ušetříte další bolení hlavy.

EDIT:Chcete-li přepsat výchozí MappingMongoConverter přidejte následující deklaraci fazole:

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

    return mongoConverter;
  }


  1. Jak mohu vytvořit dotaz s mongoose z funkce pomocí parametru?

  2. MongoDB $ milisekunda

  3. Úložiště Kubernetes NFS využívající PV a PVC

  4. mongo skupinový dotaz jak zachovat pole