Freigeben über


$documents (Aggregation)

Die Aggregationspipelinestufe $documents wird verwendet, um eine Pipeline aus einer Reihe von bereitgestellten Dokumenten zu erstellen. Diese Phase ist besonders hilfreich, wenn Sie bestimmte Dokumente verarbeiten möchten, ohne eine Sammlung abzufragen.

Syntax

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

Die Parameter

Parameter BESCHREIBUNG
<document> Ein JSON-Objekt, das ein Dokument darstellt, das in die Pipeline aufgenommen werden soll.

Beispiele

Beispiel 1: Erstellen einer Pipeline aus bestimmten Dokumenten

Im folgenden Beispiel wird veranschaulicht, wie Sie die $documents Phase verwenden, um eine Reihe vordefinierter Dokumente zu verarbeiten:

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"  // renames "tag" to "tags"
    }
  }
]);

Diese Abfrage würde das folgende Dokument zurückgeben.

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

Beispiel 2: Kombinieren $documents mit anderen Pipelinephasen

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 }
  }
]);

Diese Abfrage würde das folgende Dokument zurückgeben.

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

Einschränkungen

  • Die $documents Phase wird nur in Aggregationspipelines auf Datenbankebene unterstützt. Es muss die erste Phase in der Pipeline sein, damit sie ordnungsgemäß funktioniert.