Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
SE APLICA A:
núcleo virtual de MongoDB
El $expr
operador permite el uso de expresiones de agregación dentro del lenguaje de consulta, lo que nos permite comparar campos del mismo documento, realizar cálculos y usar operadores de agregación en operaciones de búsqueda. El $expr
operador es útil para comparaciones complejas de campos que no se pueden lograr con operadores de consulta tradicionales.
Sintaxis
La sintaxis del $objectToArray
operador es la siguiente:
{
$expr: { <aggregation expression> }
}
Parámetros
Descripción | |
---|---|
<aggregation expression> |
Cualquier expresión de agregación válida que se evalúe como un valor booleano. La expresión incluye comparaciones de campos, operaciones aritméticas, expresiones condicionales y otros operadores de agregación. |
Ejemplo
Vamos a comprender el uso con un JSON de ejemplo del conjunto de datos stores
.
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296
},
"staff": {
"totalStaff": {
"fullTime": 19,
"partTime": 20
}
},
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
}
]
},
"storeOpeningDate": ISODate("2024-09-23T13:45:01.480Z"),
"lastUpdated": ISODate("2025-06-11T11:06:57.922Z"),
"status": "active",
"category": "high-volume",
"priority": 1,
"reviewDate": ISODate("2025-06-11T11:10:50.276Z")
}
Ejemplo 1: Comparación del personal a tiempo completo y de tiempo parcial
En el ejemplo se recuperan almacenes con el número de empleados a tiempo completo mayores que los empleados de tiempo parcial.
db.stores.find({"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
$expr: {
$gt: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"]
}
})
La consulta compara dos campos dentro del mismo documento y devuelve el documento si se cumple la condición (el número de personal de tiempo completo supera el número de personal de tiempo parcial).
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296
},
"staff": {
"totalStaff": {
"fullTime": 19,
"partTime": 20
}
},
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
}
]
},
"storeOpeningDate": ISODate("2024-09-23T13:45:01.480Z"),
"lastUpdated": ISODate("2025-06-11T11:06:57.922Z"),
"status": "active",
"category": "high-volume",
"priority": 1,
"reviewDate": ISODate("2025-06-11T11:10:50.276Z")
}
Ejemplo 2: Lógica condicional con ubicación de almacén
En el ejemplo se muestra el uso de lógica condicional con $expr tiendas de extracción en el hemisferio sur donde la relación de eficiencia del personal (ventas por empleado) supera el 2000.
db.stores.find({{"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
$expr: {
$and: [
{ $gte: ["$location.lat", 70.1272] },
{
$gt: [
{
$divide: [
"$sales.totalSales",
{ $add: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"] }
]
},
2000
]
}
]
}
}).limit(1)
La consulta combina el filtrado basado en ubicación con una métrica de eficiencia calculada, que muestra la eficacia de $expr
para una lógica empresarial compleja.
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296
},
"staff": {
"totalStaff": {
"fullTime": 19,
"partTime": 20
}
},
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
}
]
},
"storeOpeningDate": ISODate("2024-09-23T13:45:01.480Z"),
"lastUpdated": ISODate("2025-06-11T11:06:57.922Z"),
"status": "active",
"category": "high-volume",
"priority": 1,
"reviewDate": ISODate("2025-06-11T11:10:50.276Z")
}
Contenido relacionado
- Revise las opciones para migrar de MongoDB a Azure Cosmos DB para MongoDB (núcleo virtual)
- Más información sobre la compatibilidad de características con MongoDB