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.
El $slice operador se usa para devolver un subconjunto de una matriz. Se puede usar para limitar el número de elementos de una matriz a un número especificado o para devolver elementos de una posición especificada en la matriz. El operador es útil cuando se trabaja con matrices grandes donde solo se necesita una parte de los datos para procesar o mostrar.
Sintaxis
La sintaxis del $slice operador es la siguiente.
- Devuelve elementos desde el inicio o el final de la matriz.
{
$slice: [ <array>, <n> ]
}
- Devuelve elementos de la posición especificada en la matriz.
{
$slice: [ <array>, <position>, <n> ]
}
Parámetros
| Parámetro | Descripción |
|---|---|
array |
Cualquier expresión de matriz válida. |
position |
Cualquier expresión entera válida. |
n |
Cualquier expresión entera válida. |
Examples
Considere este documento de ejemplo de la colección de tiendas.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Ejemplo 1: Devolver el conjunto de elementos de la matriz
Esta consulta recupera los tres primeros elementos de la matriz para sales.salesByCategory dentro _id: 988d2dd1-2faa-4072-b420-b91b95cbfd60 de la stores colección.
db.stores.aggregate([{
$match: {
_id: "988d2dd1-2faa-4072-b420-b91b95cbfd60"
}
}, {
$project: {
salesByCategory: {
$slice: ["$sales.salesByCategory", 3]
}
}
}])
Esta consulta devuelve el resultado siguiente.
[
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"salesByCategory": [
{
"categoryName": "Towel Racks",
"totalSales": 13237
},
{
"categoryName": "Washcloths",
"totalSales": 44315
},
{
"categoryName": "Face Towels",
"totalSales": 42095
}
]
}
]
Ejemplo 2: Segmentación con $push
Esta consulta usa $push con $each para agregar nuevos elementos a la promotionEvents matriz y $slice conservar solo los primeros N (segmento positivo) o los últimos N (segmento negativo). Esto garantiza que la matriz mantenga las entradas más recientes después de la actualización.
db.stores.updateOne({
_id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5"
}, {
$push: {
promotionEvents: {
$each: [{
eventName: "Black Friday Event",
promotionalDates: {
startDate: {
Year: 2024,
Month: 8,
Day: 1
},
endDate: {
Year: 2024,
Month: 8,
Day: 7
}
},
discounts: [{
categoryName: 'DJ Speakers',
discountPercentage: 25
}]
},
{
eventName: "Mega Discount Days",
promotionalDates: {
startDate: {
Year: 2024,
Month: 5,
Day: 11
},
endDate: {
Year: 2024,
Month: 5,
Day: 18
}
},
discounts: [{
categoryName: "DJ Lights",
discountPercentage: 20
}]
}
],
$slice: -3
}
}
})
La consulta devuelve el resultado siguiente.
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"location": {
"lat": 60.1441,
"lon": -141.5012
},
"staff": {
"totalStaff": {
"fullTime": 2,
"partTime": 0
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35921
},
{
"categoryName": "DJ Cables",
"totalSales": 1000
}
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Cyber Monday Event",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 8,
"Day": 1
},
"endDate": {
"Year": 2024,
"Month": 8,
"Day": 7
}
},
"discounts": [
{
"categoryName": "DJ Speakers",
"discountPercentage": 25
}
]
},
{
"eventName": "Black Friday Event",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 8,
"Day": 1
},
"endDate": {
"Year": 2024,
"Month": 8,
"Day": 7
}
},
"discounts": [
{
"categoryName": "DJ Speakers",
"discountPercentage": 25
}
]
},
{
"eventName": "Mega Discount Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 5,
"Day": 11
},
"endDate": {
"Year": 2024,
"Month": 5,
"Day": 18
}
},
"discounts": [
{
"categoryName": "DJ Lights",
"discountPercentage": 20
}
]
}
],
"tag": [
"#ShopLocal",
"#NewArrival",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
]
Ejemplo 3: Captura del primer elemento coincidente de una matriz
Esta consulta recupera el primer documento de la matriz "sales.salesByCategory".
db.stores.find({
name: "Lakeshore Retail"
}, {
_id: 1,
name: 1,
"sales.salesByCategory": {
$slice: 1
}
} // restricts the fields to be returned
)
Esta consulta devuelve el resultado siguiente.
[
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"sales": {
"salesByCategory": [
{
"categoryName": "Towel Racks",
"totalSales": 13237
}
]
}
}
]
Ejemplo 4: Captura del último elemento de una matriz
Esta consulta recupera el último documento de la matriz "sales.salesByCategory".
db.stores.find({
name: "Lakeshore Retail"
}, {
_id: 1,
name: 1,
"sales.salesByCategory": {
$slice: -1
}
})
Esta consulta devuelve el resultado siguiente.
[
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"sales": {
"salesByCategory": [
{
"categoryName": "Pillow Cases",
"totalSales": 38833
}
]
}
}
]
Ejemplo 5: Recuperar un intervalo de elementos de una matriz
Esta consulta recupera un intervalo de subconjuntos de la matriz "sales.salesByCategory".
db.stores.find({
name: "Lakeshore Retail"
}, {
_id: 1,
name: 1,
"sales.salesByCategory": {
$slice: [3, 2]
}
})
Esta consulta devuelve el resultado siguiente.
[
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"sales": {
"salesByCategory": [
{
"categoryName": "Toothbrush Holders",
"totalSales": 47912
},
{
"categoryName": "Hybrid Mattresses",
"totalSales": 48660
}
]
}
}
]
Contenido relacionado
- Revise las opciones para migrar de MongoDB a Azure Cosmos DB para MongoDB (núcleo virtual).
- Obtenga más información sobre la compatibilidad de características con MongoDB.