$dokument

Fasen $documents för aggregeringspipeline används för att skapa en pipeline från en uppsättning angivna dokument. Det här steget är särskilt användbart när du vill bearbeta specifika dokument utan att köra frågor mot en samling.

Syntax

{
  $documents: [
    <document1>,
    <document2>,
    ...
  ]
}

Parameterar

Parameter Description
<document> Ett JSON-objekt som representerar ett dokument som ska inkluderas i pipelinen.

Examples

Överväg det här exempeldokumentet från butiksamlingen.

{
    "_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
                }
            ]
        }
    ]
}

Exempel 1: Skapa en pipeline från specifika dokument

Den här frågan visar hur du använder $documents fasen för att bearbeta en uppsättning fördefinierade dokument:

db.aggregate([{
    $documents: [{
        _id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
        name: "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
        location: {
            lat: 60.1441,
            lon: -141.5012
        },
        sales: {
            fullSales: 3700
        },
        tag: ["#ShopLocal", "#SeasonalSale"]
    }, {
        _id: "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
        name: "Contoso, Ltd. | Office Supply Deals - South Shana",
        location: {
            lat: 40.7128,
            lon: -74.0060
        },
        sales: {
            fullSales: 5400
        },
        tag: ["#TechDeals", "#FreeShipping"]
    }]
}, {
    $project: {
        _id: 1,
        name: 1,
        "location.lat": 1,
        "location.lon": 1,
        "sales.fullSales": 1,
        tags: "$tag"
    }
}])

Den här frågan returnerar följande resultat:

[
    {
        "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
        "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
        "location": {
            "lat": 60.1441,
            "lon": -141.5012
        },
        "sales": {
            "fullSales": 3700
        },
        "tags": [
            "#ShopLocal",
            "#SeasonalSale"
        ]
    },
    {
        "_id": "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
        "name": "Contoso, Ltd. | Office Supply Deals - South Shana",
        "location": {
            "lat": 40.7128,
            "lon": -74.006
        },
        "sales": {
            "fullSales": 5400
        },
        "tags": [
            "#TechDeals",
            "#FreeShipping"
        ]
    }
]

Exempel 2: Kombinera $documents med andra pipelinesteg

Den här frågan kombinerar $documents pipelinesteg tillsammans med $match och $sort pipelinesteg.

db.aggregate([{
    $documents: [{
        _id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
        name: "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
        location: {
            lat: 60.1441,
            lon: -141.5012
        },
        sales: {
            fullSales: 3700
        },
        tag: ["#ShopLocal", "#SeasonalSale"]
    }, {
        _id: "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
        name: "Contoso, Ltd. | Office Supply Deals - South Shana",
        location: {
            lat: 40.7128,
            lon: -74.0060
        },
        sales: {
            fullSales: 5400
        },
        tag: ["#TechDeals", "#FreeShipping"]
    }]
}, {
    $match: {
        "sales.fullSales": {
            $gt: 4000
        }
    }
}, {
    $sort: {
        "sales.fullSales": -1
    }
}])

Den här frågan returnerar följande resultat:

[
  {
    "_id": "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
    "name": "Contoso, Ltd. | Office Supply Deals - South Shana",
    "location": { "lat": 40.7128, "lon": -74.006 },
    "sales": { "fullSales": 5400 },
    "tag": [ "#TechDeals", "#FreeShipping" ]
  }
]

Begränsningar

  • Den $documents fasen stöds endast i sammansättningspipelines på databasnivå.
  • Det måste vara det första steget i pipelinen för att fungera korrekt.