MongoDb no admite claves con punto. Tengo un hash anidado de Ruby que tiene muchas claves con carácter de punto (.) . ¿Hay alguna configuración que se pueda usar para especificar un reemplazo de carácter para . como un guión bajo _ al insertar dichos datos en MongoDb
Estoy usando MongoDB con Ruby y mongo gem.
ejemplo hash es como a continuación
{ "key.1" => { "second.key" => { "third.key" => "val" } } }Si no es posible utilizar claves con . en Mongodb, tendrás que modificar los datos de entrada:
hash = { 'key.1' => { 'second.key' => { 'third.key' => 'val.1', 'fourth.key' => ['val.1', 'val.2'] } } }Este método recursivo transforma las claves de un Hash anidado:
def nested_gsub(object, pattern = '.', replace = '_') if object.is_a? Hash object.map do |k, v| [k.to_s.gsub(pattern, replace), nested_gsub(v, pattern, replace)] end.to_h else object end end nested_gsub(hash) devuelve:
{ "key_1" => { "second_key" => { "third_key" => "val.1", "fourth_key" => [ "val.1", "val.2" ] } } }Es posible agregar más casos al método anterior:
def nested_gsub(object, pattern = '.', replace = '_') case object when Hash object.map do |k, v| [k.to_s.gsub(pattern, replace), nested_gsub(v, pattern, replace)] end.to_h when Array object.map { |v| nested_gsub(v, pattern, replace) } when String object.gsub(pattern, replace) else object end end nested_gsub ahora iterará en valores de cadena y matrices:
{ "key_1" => { "second_key" => { "third_key" => "val_1", "fourth_key" => [ "val_1", "val_2" ] } } }En mongoDB, no hay configuración para admitir puntos en la clave. Debe preprocesar el JSON antes de insertarlo en la colección MongoDB.
Un enfoque es que puede reemplazar el punto con su equivalente Unicode U+FF0E antes de la inserción.
Espero que esto ayude.