Todos los productos
Search
Centro de documentos

:bit_struct

Última actualización: Sep 04, 2026

Utilice esta función de plugin en una cláusula de filtro para filtrar datos. También puede usar funciones que devuelvan un valor numérico en una cláusula de ordenamiento para clasificar los datos. Los campos del documento que se utilicen como parámetros de la función deben haberse creado previamente como índice o como propiedad.

Funciones y características

1. Introducción

bit_struct: Divide cada valor de un campo INT_ARRAY en segmentos personalizados según las posiciones de bits y ejecuta operaciones específicas sobre dichos segmentos.

2. Sintaxis

bit_struct(doc_field,"$struct_definition", operation,...)

3. Parámetros

  • doc_field: Nombre de un campo de tipo INT_ARRAY.

  • $struct_definition: Divide un valor int64 en varias dimensiones. Cada dimensión se define mediante una posición de bit inicial y final, separadas por un guion (-). Las posiciones de bit comienzan en cero y se cuentan desde el bit más significativo. El rango válido va de 0 a 63. Es posible definir varios dimensiones separándolas con comas (,). A cada dimensión se le asigna un número consecutivo a partir de 1. Por ejemplo, para dividir un valor int64 en tres dimensiones donde los bits 0-9 representan el primer valor ($1), los bits 10-48 el segundo ($2) y los bits 49-60 el tercero ($3), establezca este parámetro como "0-9,10-48,49-60".

  • operation: Define las operaciones por ejecutar. Debe especificar como mínimo una y como máximo cinco. A cada operación se le asigna un número que continúa la secuencia iniciada en $struct_definition. Si define varias operaciones, una posterior puede utilizar el valor de retorno de una anterior al hacer referencia a su número asignado. Las operaciones disponibles son:

    • "equal,$m,$n": Comprueba si el valor representado por $m es igual al representado por $n. Devuelve true si son iguales y false en caso contrario.

    • "overlap,$m,$n,$k,$p": Verifica si el rango definido por ($m, $n) se superpone con el rango ($k, $p) en una recta numérica. Devuelve true si hay superposición y false en caso contrario.

    • "and,$m,$n,...": Devuelve el resultado de una operación lógica AND (&&) aplicada a $m, $n, etc.

4. Valor de retorno

Un valor int64. La función devuelve el índice basado en cero del primer elemento en doc_field para el cual la última operación evaluada resulta verdadera. Si ningún elemento de doc_field cumple con las operaciones especificadas, la función devuelve -1.

5. Notas

  • Los campos que dependan de los parámetros de la función deben crearse como campos de propiedad.

Escenarios de uso

¿Qué tiendas están abiertas durante un periodo específico? Suponga que un documento contiene un campo llamado open_time de tipo int64_array, donde cada valor representa un periodo de horario comercial. Los 32 bits altos de un valor int64 indican la hora de apertura y los 32 bits bajos la hora de cierre. Para consultar las tiendas abiertas de 14:00 a 15:30, convierta este rango a minutos transcurridos desde el inicio del día (00:00). Por ejemplo, el intervalo de 14:00 a 15:30 se representa como (840, 930). La cláusula de filtro en la consulta quedaría de la siguiente manera:

filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1
  • Consulta de restaurantes disponibles para un grupo de Pmin a Pmax personas en una comida específica de un día futuro

Suponga que un documento contiene un campo int64_array denominado book_info. En cada valor de este arreglo, los bits 0-7 representan la fecha, los bits 8-15 el tipo de comida, los bits 16-41 el tamaño mínimo del grupo y los bits 42-63 el tamaño máximo. Para buscar restaurantes que puedan atender a un grupo de 3 a 5 personas para la cena (tipo de comida 3) mañana (fecha 1), escriba la cláusula de filtro del siguiente modo:

filter=bit_struct(book_info,"0-7,8-15,16-41,42-63",
"equal,$1,1","equal,$2,3","overlap,$3,$4,3,5","and,$5,$6,$7")!=-1
// Explanation
// $1 represents the value from bits 0-7 of book_info.
// $2 represents the value from bits 8-15 of book_info.
// $3 represents the value from bits 16-41 of book_info.
// $4 represents the value from bits 42-63 of book_info.
// $5 represents the return value of the operation "equal,$1,1".
// $6 represents the return value of the operation "equal,$2,3".
// $7 represents the return value of the operation "overlap,$3,$4,3,5".
// The function returns the array index in book_info that corresponds to the first time the logical AND of the values represented by $5, $6, and $7 is true.
  • Consulta de tiendas con inventario > 10 entre las 14:00 y las 15:30, lo que corresponde al intervalo (840, 930). Dado que la función bit_struct devuelve un índice, puede combinarla con la función multi_attr para obtener el valor de otro campo de tipo arreglo en esa misma posición. Por ejemplo, incluya lo siguiente en una sentencia de consulta:

filter=multi_attr(store, bit_struct(dispatch_time,"0-31,32-63", "equal,$1,840", "equal,$2,930", "and,$3,$4"))>10
// Explanation
// dispatch_time is a multi-value INT64 field in the document that stores the merchant's delivery times. Convert the times into a period measured in minutes from the start of the day (00:00). The period from 14:00 to 15:30 is represented as (840, 930).
// store is an int64_array field where each value corresponds to a time period in dispatch_time and represents the inventory level for that period.

Construcción de valores int64_array

Ejemplo

Este ejemplo utiliza Python para construir un valor int64 correspondiente al periodo de 8:00 a 18:00.

# Start time 8:00, in minutes
start=8*60

# End time 18:00
end=18*60

# Use the high 32 bits of the int64 for the start time and the low 32 bits for the end time.
# First, construct the high 32 bits.
start=start<<32
print("High 32 bits",start)#2061584302080

# Final result
result=start|end
print("Result",result)#2061584303160

Resultado: 2,061,584,303,160

A continuación se presenta un ejemplo sencillo.

Suponga que desea comprobar si un arreglo contiene un valor específico almacenado en los 32 bits bajos de uno de sus elementos. Escriba la cláusula de filtro de la siguiente manera:

bit_struct(type_arr,"0-31,32-63","equal,$2,40506")!=-1
// Explanation:
// "0-31,32-63": This is a fixed value.
// "equal,$2,40506": Checks if the array contains the value 40506.