Módulo: Mongoid::Campos::ClassMethods

Definido en:
lib/mongoid/fields.rb,
lib/mongoid/fields.rb

Resumen del método de instancia colapsar

Detalles del método de instancia

#attribute_namesarreglo<String>

Devuelve un arreglo de nombres de los atributos disponibles en este objeto.

Brinda los nombres de los campos de manera independiente del ORM. Rails v3.1+ usa este método para envolver automáticamente parámetros en solicitudes JSON.

Ejemplos:

Obtén los nombres de los campos

Model.attribute_names

Devuelve:

  • (arreglo<String>)

    Los nombres de los campos



449
450
451
# Archivo 'lib/mongoid/fields.rb', línea 449

def attribute_names
  Campos.claves
end

#auto_embed_field(name, model: 'voyage-4', num_dimensions: nil, quantization: nil, similarity: nil, índice: nil) ⇒ Object

Declara un campo de texto y registra un índice de búsqueda vectorial de Atlas Vector Search correspondiente para él usando el tipo de incrustación automática (autoEmbed). Atlas genera las incrustaciones automáticamente en el momento del indexado y la query; no se requieren vectores precomputados.

Ejemplos:

Declaración mínima.

class Article
  include Mongoid::Document
  auto_embed_field :description
end

Con todas las opciones.

class Article
  include Mongoid::Document
  auto_embed_field :description,
                   model: 'voyage-4',
                   num_dimensions: 512,
                   quantization: 'binary',
                   similarity: 'cosine',
                   index: :article_embed
end

Parámetros:

  • Nombre (Symbol | string)

    El nombre del campo de texto para declarar y auto-incrustar.

  • Modelo (string) (por defecto: 'Voyage-4')

    El nombre del embedding model. Por defecto, 'Voyage-4' (recomendado). Valores compatibles en Public Preview: Voyage-4-grande, Voyage-4, Voyage-4-ligero, Voyage-código-3.

  • num_dimensions (Integer | nil) (valor por defecto: nil)

    Número de vector dimensions. Valores compatibles: 256, 512, 1024, 2048. Por defecto: 1024.

  • cuantización (String | nil) (valor por defecto: nil)

    Tipo de quantization: float, escalar, binary o binaryNoRescore. Por defecto: escalar.

  • similitud (String | nil) (valor por defecto: nil)

    Función de similitud: dotProduct, cosine o euclidean.

  • index (Símbolo | String | nula) (valor por defecto: nil)

    El nombre del índice. Si se omite, el índice no tiene nombre y Atlas lo llama 'por defecto'.



542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
# Archivo 'lib/mongoid/fields.rb', línea 542

def auto_embed_field(Nombre, model: 'voyage-4', num_dimension: nulo, quantization: nulo, similitud: nulo, index: nulo)
  Campo(Nombre, tipo: String)

  field_spec = {
    tipo: 'autoEmbed',
    modalidad: 'text',
    ruta: Nombre.to_s,
    model: Modelo
  }
  field_spec[numDimensions] = num_dimensions si num_dimensions
  field_spec[quantization]  = cuantización  si cuantización
  field_spec[similitud]    = similitud    si similitud

  si index
    vector_search_index(index, campo: [ field_spec ])
  else
    vector_search_index(campo: [ field_spec ])
  end
end

#cleanse_localized_field_names(nombre) ⇒ campo

Elimina las _translations del nombre de campo dado. Esto se hace solo cuando aún no existe un nombre de campo o relación con el mismo nombre (es decir, con el sufijo _translations). Esta verificación para un campo existente se realiza recursivamente

Parámetros:

  • Nombre (String | Símbolo)

    El nombre del campo a limpiar.

Devuelve:

  • (campo)

    El nombre del campo sin _translations



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# Archivo 'lib/mongoid/fields.rb', línea 98

def cleanse_localized_field_names(Nombre)
  Nombre = database_field_name(Nombre.to_s)

  klass = sí mismo
  [].tocar hacer |res|
    ar = Nombre.división('.')
    ar.each_with_index hacer |fn, i|
      llave = fn
      a menos que klass.Campos.key?(fn) || klass.relaciones.key?(fn)
        llave = si fn.end_with?(TRANSLATIONS_SFX)
                fn.delete_suffix(TRANSLATIONS_SFX)
              else
                fn
              end

      end
      res.push(llave)

      si klass.Campos.key?(fn)
        res.push(ar.descartar(i + 1).unirse('.')) a menos que i == ar.longitud - 1
        break
      elsif klass.relaciones.key?(fn)
        klass = klass.relaciones[llave].klass
      end
    end
  end.unirse('.')
end

#database_field_name(name) ⇒ String

Obtener el nombre del campo proporcionado tal como está almacenado en la base de datos. Se utiliza para determinar si el campo está o no aliasado.

Parámetros:

  • Nombre (String | Símbolo)

    El nombre a obtener.

Devuelve:

  • (string)

    El nombre del campo tal como se almacena en la base de datos.



459
460
461
# Archivo 'lib/mongoid/fields.rb', línea 459

def database_field_name(Nombre)
  Campos.database_field_name(Nombre, relaciones, campos_alias, asociaciones_aliased)
end

#extract_id_field(atributos) ⇒ objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Extrae el campo id del hash de atributos especificado según los alias definidos en esta clase.

Parámetros:

  • atributos (encriptada)

    Los atributos que se deben inspeccionar.

Devuelve:

  • (objeto)

    El valor del id.



81
82
83
84
85
86
87
88
# Archivo 'lib/mongoid/fields.rb', línea 81

def extract_id_field(atributos)
  id_fields.cada hacer |k|
    si v = atributos[k]
      return v
    end
  end
  nulo
end

#campo(nombre, opciones = {}) ⇒ Campo

Define todos los campos accesibles en el Documento. Para cada campo definido, se añadirá un método getter y setter como método de instancia al Documento.

Ejemplos:

Define un campo.

field :score, type: Integer, default: 0

Parámetros:

  • Nombre (Símbolo)

    El nombre del campo.

  • opciones (encriptada) (por defecto: {})

    Las opciones que se pasan al campo.

Opciones Hash (options):

  • Tipo (Clase | Símbolo | String)

    El tipo del campo.

  • :etiqueta (string)

    La etiqueta para el campo.

  • por defecto (Objeto | Proc)

    El valor por defecto del campo.

Devuelve:

  • (campo)

    El campo generado



577
578
579
580
581
582
583
584
585
# Archivo 'lib/mongoid/fields.rb', línea 577

def Campo(Nombre, opciones = {})
  denominada = Nombre.to_s
  Validadores::Macro.validar(sí mismo, Nombre, opciones)
  added = add_field(denominada, opciones)
  descendants.cada hacer |subclase|
    subclase.add_field(denominada, opciones)
  end
  added
end

#id_fieldsarreglo<Symbol | String>

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve la lista de campos id para esta clase modelo, tanto como cadenas como símbolos.

Devuelve:

  • (arreglo<Symbol | String>):

    Lista de campos id.



62
63
64
65
66
67
68
69
70
71
# Archivo 'lib/mongoid/fields.rb', línea 62

def id_fields
  IDS.dup.tocar hacer |id_fields|
    campos_alias.cada hacer |k, v|
      si v == '_id'
        id_fields << k.to_sym
        id_fields << k
      end
    end
  end
end

#replace_field(nombre, tipo) ⇒ Serializable

Reemplazar un campo con un nuevo tipo.

Ejemplos:

Reemplace el campo.

Model.replace_field("_id", String)

Parámetros:

  • Nombre (string)

    El nombre del campo.

  • tipo (clase)

    El nuevo tipo de campo.

Devuelve:



596
597
598
599
# Archivo 'lib/mongoid/fields.rb', línea 596

def replace_field(Nombre, tipo)
  remove_defaults(Nombre)
  add_field(Nombre, Campos[Nombre].opciones.fusionar(tipo: tipo))
end

#traverse_association_tree(clave) {|The, The, Whether| ...} ⇒ Campo

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Recorrer hacia abajo el árbol de asociaciones y buscar el campo para la clave proporcionada.

Parámetros:

  • llave (string)

    La clave utilizada para la búsqueda del árbol de asociaciones.

  • &bloque

    El bloque.

Parámetros de rendimiento:

  • La (Símbolo)

    método actual.

  • La (Symbol | string)

    campo o la relación.

  • Si (true | false)

    el segundo parámetro de rendimiento es un campo o no.

Devuelve:

  • (campo)

    El campo encontrado para la clave dada al final de la búsqueda. Esto devolverá nil si lo último que se encontró es una asociación o no se encontró ningún campo para la clave dada.



627
628
629
# Archivo 'lib/mongoid/fields.rb', línea 627

def recorrer_árbol_de_asociaciones(llave, &bloque)
  Campos.recorrer_árbol_de_asociaciones(llave, Campos, relaciones, asociaciones_aliased, &bloque)
end

#using_object_ids?true | false

Método de conveniencia para determinar si estamos utilizando BSON::ObjectIds como nuestra id.

Ejemplos:

¿Esta clase utiliza IDs de objetos?

person.using_object_ids?

Devuelve:

  • (true | false)

    Si la clase utiliza BSON::ObjectIds para el ID.



608
609
610
# Archivo 'lib/mongoid/fields.rb', línea 608

def ¿usando_object_ids?
  Campos['_id'].object_id_field?
end

#vector_field(name, dimensions:, similarity: 'cosine', index: nil) ⇒ Objeto

Declara un campo de vector embedding y registra un índice correspondiente de Atlas Vector Search para él en un solo paso.

El campo se almacena como un arreglo. Para opciones avanzadas del índice (quantization, método de indexación, ajuste de HNSW), utiliza en su lugar la combinación explícita field + vector_search_index.

Ejemplos:

Declaración mínima.

class Article
  include Mongoid::Document
  vector_field :embedding, dimensions: 1536
end

Con todas las opciones.

class Article
  include Mongoid::Document
  vector_field :embedding, dimensions: 1536,
                           similarity: 'dotProduct',
                           index: :article_vectors
end

Parámetros:

  • Nombre (Symbol | string)

    El nombre del campo de incrustación.

  • dimensión (Número entero)

    El número de vector dimensions. Obligatorio.

  • similitud (string) (por defecto: 'coseno')

    La métrica de similitud a utilizar: 'coseno' (por defecto), 'euclidiana' o 'dotProduct'.

  • index (Símbolo | String | nula) (valor por defecto: nil)

    El nombre del índice de búsqueda vectorial. Si se omite, el índice no tiene nombre y Atlas lo denomina "por defecto".



490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
# Archivo 'lib/mongoid/fields.rb', línea 490

def campo_vectorial(Nombre, dimensions:, similitud: 'cosine', index: nulo)
  Campo(Nombre, tipo: Arreglo)

  field_spec = {
    tipo: 'vector',
    ruta: Nombre.to_s,
    numDimensions: dimensión,
    similitud: similitud
  }

  si index
    vector_search_index(index, campo: [ field_spec ])
  else
    vector_search_index(campo: [ field_spec ])
  end
end