Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR:
MongoDB vCore
Operatorn $zip
används för att sammanfoga två eller flera matriser elementmässigt till en enda matris med matriser. Det är användbart när du vill kombinera relaterade element från flera matriser till en enda matrisstruktur.
Syntax
Syntaxen för operatorn $zip
är följande:
{
$zip: {
inputs: [ <array1>, <array2>, ... ],
useLongestLength: <boolean>, // Optional
defaults: <array> // Optional
}
}
Parametrar
beskrivning | |
---|---|
inputs |
En matris med matriser som ska sammanfogas elementmässigt. |
useLongestLength |
Ett booleskt värde som, om det är inställt på true, använder den längsta längden på indatamatriserna. Om falskt eller inte anges används den kortaste längden. |
defaults |
En matris med standardvärden som ska användas om useLongestLength är true och en indatamatris är kortare än den längsta matrisen. |
Exempel
Nu ska vi förstå användningen med exempel-json från stores
datauppsättningen.
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"location": {
"lat": -51.3041,
"lon": -166.0838
},
"staff": {
"totalStaff": {
"fullTime": 5,
"partTime": 20
}
},
"sales": {
"totalSales": 266491,
"salesByCategory": [
{
"categoryName": "Towel Racks",
"totalSales": 13237
},
{
"categoryName": "Washcloths",
"totalSales": 44315
},
{
"categoryName": "Face Towels",
"totalSales": 42095
},
{
"categoryName": "Toothbrush Holders",
"totalSales": 47912
},
{
"categoryName": "Hybrid Mattresses",
"totalSales": 48660
},
{
"categoryName": "Napkins"
},
{
"categoryName": "Pillow Cases",
"totalSales": 38833
}
]
}
}
Exempel 1: Grundläggande användning
Anta att du vill sammanfoga fälten categoryName
och totalSales
från matrisen salesByCategory
.
db.stores.aggregate([
{ $match: {"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60"} },
{
$project: {
name:1,
categoryNames: "$sales.salesByCategory.categoryName",
totalSales: "$sales.salesByCategory.totalSales",
categoryWithSales: {
$zip: {
inputs: ["$sales.salesByCategory.categoryName", "$sales.salesByCategory.totalSales"],
useLongestLength: false
}
}
}
}
])
Detta skapar utdata för enskilda matriser med matriser under categoryWithSales
fält.
useLongestLength
inställd på true
returnerar följande utdata, medan ett värde för false
tar bort matrisen Napkins
från utdata.
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"categoryNames": [
"Towel Racks",
"Washcloths",
"Face Towels",
"Toothbrush Holders",
"Hybrid Mattresses",
"Napkins",
"Pillow Cases"
],
"totalSales": [
13237, 44315,
42095, 47912,
48660, 38833
],
"categoryWithSales": [
["Towel Racks", 13237],
["Washcloths", 44315],
["Face Towels", 42095],
["Toothbrush Holders", 47912],
["Hybrid Mattresses", 48660],
["Napkins", null],
["Pillow Cases", 38833]
]
}
Relaterat innehåll
- Granska alternativ för migrering från MongoDB till Azure Cosmos DB för MongoDB (virtuell kärna)
- Läs mer om funktionskompatibilitet med MongoDB