Stream: Bereichsbezogen, Global

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 11 Minuten Lesedauer
  • Die Stream Die API stellt Methoden zur Interaktion mit einem Stream von Elementen wie Datensätzen bereit. Sie können beispielsweise verwenden Foreach() Methode zum Aktualisieren des Status jedes Datensatzes in einem von zurückgegebenen Stream GlideQuery API.

    Sie können ein Stream-Objekt auf folgende Arten abrufen:

    • Instanziieren Sie ein Stream-Objekt mit dem Konstruktor.
    • Gibt ein Stream-Objekt aus zurück GlideQuery.select() Methode. Weitere Informationen finden Sie unter GlideQuery .

    Diese Methode ist statisch und erfordert keine Instanz der Klasse: FromArray() .

    Verwenden Sie Stream API in bereichsbezogenen oder globalen serverseitigen Skripts. Diese API erfordert das Plugin GlideQuery [com.sn_glidequery].

    Implementierung

    Diese API kann mit funktionieren GlideQuery Und Optional APIs in einem builder-Muster, bei dem die Methode die Kette aufruft, wobei jede Methode auf dem zurückgegebenen Ergebnis der vorherigen Methode aufbaut. Verwenden Sie Methoden, um die Attribute der Abfrage zu definieren. Die Methoden werden erst ausgeführt, wenn Sie eine Terminalmethode aufrufen, eine Methode, die ein Abfrageergebnis zurückgibt, sodass Sie die Anforderungen der Abfrage vor der Ausführung definieren können.

    Wenn die Abfrage einen einzelnen Datensatz zurückgibt, umschließt das System das Ergebnis in ein optionales Objekt. Wenn die Abfrage einen Stream von Datensätzen zurückgibt, umschließt das System das Ergebnis in ein Stream-Objekt. Mit diesen Objekten können Sie das Ergebnis mit einer Reihe von Methoden in jeder API verwalten.

    Zum Beispiel dies Das Skript führt eine Abfrage für die Aufgabentabelle durch, gruppiert die Datensätze nach Priorität und gibt jede Priorität zurück, deren Neuzuweisungen insgesamt größer als vier sind.

    var query = new global.GlideQuery('task')
        .where('active', true) //Returns new GlideQuery object with a "where" clause.
        .groupBy('priority') //Returns new GlideQuery object with a "group by" clause.
        .aggregate('sum', 'reassignment_count') //Returns new GlideQuery object with a "sum(reassignment_count)" clause.
        .having('sum', 'reassignment_count', '>', 4) //Returns new GlideQuery object with a "having reassignment_count > 4" clause.
        .select() //Returns a stream of records wrapped in a Stream object.  
        .forEach(function (priority){ //Terminal method in the Stream class that executes the query and returns the result. 
          gs.info("Priority " + priority.group.priority + ": " + priority.sum.reassignment_count + " reassignments");
        });
    Ausgabe:
    Priority 1: 11 reassignments
    Priority 3: 6 reassignments
    Priority 5: 5 reassignments

    Terminalmethoden

    Aus Leistungsgründen ruft eine Abfrage nur Daten ab, wenn Sie eine Terminalmethode aufrufen. Dies sind die Terminalmethoden aus dem Stream Klasse:

    Stream – Stream(function nextFn)

    Instanziiert ein Stream-Objekt.

    Anstatt diesen Konstruktor zu verwenden, können Sie ein Stream-Objekt basierend auf einer Abfrage mit zurückgeben GlideQuery API.

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    NextFn Funktion Eine Funktion, die das nächste Element im Stream abruft.

    Dieses Beispiel zeigt, wie Sie ein Stream-Objekt basierend auf einem Zufallszahlengenerator erstellen. Stellen Sie sicher, dass Sie einschließen Grenzwert () Methode, um die Erstellung einer Endlosschleife zu vermeiden.

    new Stream(Math.random)
       .map(Math.round)
       .map(function (num) { 
          return num === 1 ? 'heads' : 'tails'; 
       })
       .limit(10)
       .forEach(gs.info)
    

    Ausgabe:

    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: heads
    *** Script: tails
    *** Script: tails
    *** Script: tails
    *** Script: tails

    Stream – Block (Anzahl)

    Gibt Ergebnisse in Batches von Arrays zurück, die jeweils die Anzahl der an die Methode übergebenen Datensätze enthalten.

    Tabelle : 2. Parameter
    Name Typ Beschreibung
    count Anzahl Anzahl der Datensätze in jedem Array, die vom Stream zurückgegeben werden.
    Tabelle : 3. Rückgaben
    Typ Beschreibung
    Stream Objekt, das zur Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    Dieses Beispiel zeigt, wie eine Tabelle abgefragt und das Ergebnis in Batches von Arrays unterteilt wird.

    var chunkResult = new GlideQuery('cmdb_ci_hardware')
        .select('asset', 'purchase_date')
        .limit(10)
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .forEach(function (chunk){ 
            gs.info(JSON.stringify(chunk, null, 2)); 
        });

    Ausgabe:

    *** Script: [
      {
        "asset": "2fa9680d3790200044e0bfc8bcbe5dfb",
        "purchase_date": "2022-02-28",
        "sys_id": "2ba9680d3790200044e0bfc8bcbe5dfc"
      },
      {
        "asset": "73c1fa8837f3100044e0bfc8bcbe5ded",
        "purchase_date": "2017-12-05",
        "sys_id": "b4fd7c8437201000deeabfc8bcbe5dc1"
      },
      {
        "asset": "cbc1ba8837f3100044e0bfc8bcbe5dad",
        "purchase_date": "2017-12-05",
        "sys_id": "25fd3c8437201000deeabfc8bcbe5dea"
      },
      {
        "asset": "8fc1ba8837f3100044e0bfc8bcbe5da9",
        "purchase_date": null,
        "sys_id": "108a9205c611227500786e160f9d343e"
      },
      {
        "asset": "27c1fa8837f3100044e0bfc8bcbe5dd8",
        "purchase_date": "2017-06-06",
        "sys_id": "a9a2d111c611227601fb37542399caa8"
      }
    ]
    *** Script: [
      {
        "asset": "93c1fa8837f3100044e0bfc8bcbe5d30",
        "purchase_date": "2017-12-05",
        "sys_id": "6b43105c37301000deeabfc8bcbe5db2"
      },
      {
        "asset": "a2c0b1213784200044e0bfc8bcbe5de3",
        "purchase_date": "2017-12-05",
        "sys_id": "aac0b1213784200044e0bfc8bcbe5de3"
      },
      {
        "asset": "33c1fa8837f3100044e0bfc8bcbe5def",
        "purchase_date": "2017-12-05",
        "sys_id": "d0e8761137201000deeabfc8bcbe5da7"
      },
      {
        "asset": "53c1fa8837f3100044e0bfc8bcbe5d1f",
        "purchase_date": "2017-12-05",
        "sys_id": "53fdbc8437201000deeabfc8bcbe5d10"
      },
      {
        "asset": "f1c031213784200044e0bfc8bcbe5de0",
        "purchase_date": "2017-12-05",
        "sys_id": "71c031213784200044e0bfc8bcbe5de1"
      }
    ]

    Dieses Beispiel zeigt, wie eine untergeordnete Abfrage mithilfe von Batches von IDs erstellt wird. Wenn Sie anrufen FlatMap() Methode nach Verwendung von Block() Methode, iteriert das System über den Batch von Datensätzen anstelle jedes einzelnen Datensatzes.

    var chunkResult = new global.GlideQuery('cmdb_ci_hardware')
        .select('sys_id')
        .map(function (device) { return device.sys_id; })
        .chunk(5) //Returns arrays of 5 sys_ids at a time
        .flatMap(function (deviceIds) {
            return new GlideQuery('cmdb_sam_sw_install')
                .where('installed_on', 'IN', deviceIds)
                .select('software_model', 'installed_on');
        })
    
    gs.info(JSON.stringify(chunkResult));

    Stream – Every (Funktionsprädikat)

    Wendet eine Prädikatfunktion auf jedes Element im Stream-Objekt an. Wenn das Prädikat für jedes Element im Stream „wahr“ zurückgibt, gibt die Methode „wahr“ zurück. Wenn das Prädikat für ein Element im Stream „falsch“ zurückgibt, gibt die Methode „falsch“ zurück.

    Tabelle : 4. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf jeden Datensatz oder jedes Element im Stream-Objekt angewendet werden soll. Die Funktion muss jedes Element im Stream als Eingabe verwenden und einen booleschen Wert zurückgeben.
    Tabelle : 5. Rückgaben
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob die Prädikatfunktion für jedes Element im Stream „wahr“ zurückgibt.

    Gültige Werte:
    • Wahr: Die Prädikatfunktion gibt „wahr“ für jedes Element im Stream zurück.
    • Falsch: Die Prädikatfunktion gibt nicht für jedes Element im Stream „wahr“ zurück.

    Dieses Beispiel zeigt, wie eine Prädikatfunktion auf jedes Element in einem Stream angewendet wird.

    var hasOnlyShortDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .every(function (t) { 
           return t.description.length < 10; 
           });
    
    gs.info(hasOnlyShortDescriptions);

    Ausgabe:

    false

    Stream – Filter(Funktionsprädikat)

    Wendet eine Prädikatfunktion auf jedes Element im Stream-Objekt an. Wenn das Prädikat „wahr“ zurückgibt, gibt die Methode den Stream zurück. Wenn das Prädikat „falsch“ zurückgibt, wird ein leeres Stream-Objekt zurückgegeben.

    Um eine bessere Leistung zu erzielen, verwenden Sie Wobei() , Where-Not-Null() , Und Where Null() -Methoden in GlideQuery Klasse anstelle dieser Methode, wenn möglich. Siehe GlideQuery .

    Tabelle : 6. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf jeden Datensatz oder jedes Element im Stream-Objekt angewendet werden soll. Die Funktion muss jedes Element im Stream als Eingabe verwenden und einen booleschen Wert zurückgeben.
    Tabelle : 7. Rückgaben
    Typ Beschreibung
    Stream Objekt, das zur Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    Dieses Beispiel zeigt, wie alle Datensätze in der Aufgabentabelle anhand eines definierten Filters überprüft werden. Wenn die Datensätze mit dem Filter übereinstimmen, gibt das System den Datenstrom zurück. Andernfalls wird ein leeres Stream-Objekt zurückgegeben.

    var shoutingTasks = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .filter(function (task) { 
           return task.description.toUpperCase() === task.description; 
       })

    Stream – Find(Funktionsprädikat)

    Gibt den ersten Datensatz oder das erste Element im Stream-Objekt zurück, der der Prädikatfunktion entspricht. Wenn keine Prädikatfunktion angegeben wird, gibt die Methode den ersten Datensatz oder das erste Element im Stream zurück.

    Tabelle : 8. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Optional. Prädikatfunktion, die auf die Elemente im Stream-Objekt angewendet werden soll. Die Funktion muss jedes Element im Stream als Eingabe verwenden und einen booleschen Wert zurückgeben.
    Tabelle : 9. Rückgaben
    Typ Beschreibung
    Optional Objekt, das den zurückgegebenen Datensatz enthält.

    Dieses Beispiel zeigt, wie der erste Datensatz aus dem Stream zurückgegeben wird.

    var UserOptional = new global.GlideQuery('sys_user')
       .where('active', true)
       .where('company.name', 'ServiceNow')
       .select()
       .find()
       .map(function (user) { 
          return JSON.stringify(user); 
       })
    
    gs.info(UserOptional);

    Ausgabe:

    Optional<{"sys_id":"babb4639b76233004fbc2089ee11a97f"}>

    Stream – flatMap(Funktion FN)

    Wendet eine Funktion auf jedes Element in einem Stream an. Gibt einen anderen Stream zurück, über den Sie iterieren können.

    Verwenden Sie diese Methode anstelle von Karte () Wenn die Funktion einen zweiten Datenstrom zurückgibt.

    Tabelle : 10. Parameter
    Name Typ Beschreibung
    fn Funktion Funktion, die auf das Ergebnis der Abfrage angewendet werden soll, die ein Stream-Objekt zurückgibt.
    Tabelle : 11. Rückgaben
    Typ Beschreibung
    Stream Objekt, das den Stream von Datensätzen enthält, die nach dem Anwenden der Funktion aktualisiert wurden.

    Dieses Beispiel zeigt, wie Sie die Anwendertabelle abfragen und dann eine untergeordnete Abfrage aus dem Ergebnis erstellen. In diesem Beispiel wird eine N+1-Abfrage ausgeführt, die zu Leistungsproblemen führen kann. Vermeiden Sie diesen Anwendungsfall in einer Produktionsumgebung.

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new global.GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .toArray(100);
    
    gs.info(JSON.stringify(records));

    Ausgabe:

    [
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:14:56"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:43"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-06-15 06:59:05"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:33"
       },
       {
          "first_name":"System",
          "last_name":"Administrator",
          "description":null,
          "closed_at":"2020-08-23 13:07:14"
       }
    ]

    Stream – forEach(Funktion FN)

    Wendet die angegebene Funktion auf jeden Datensatz oder jedes Element im Stream an.

    Tabelle : 12. Parameter
    Name Typ Beschreibung
    fn Funktion Funktion, die auf jedes Element im Stream angewendet werden soll.
    Tabelle : 13. Rückgaben
    Typ Beschreibung
    Keine

    Dieses Beispiel zeigt, wie Sie das Ergebnis jedes Elements im Stream drucken.

    var firstNames = new global.GlideQuery('sys_user')
       .select('first_name')
       .forEach(function (u) { 
          gs.debug(u.first_name); 
       });

    Ausgabe:

    *** Script: [DEBUG] survey
    *** Script: [DEBUG] Lucius
    *** Script: [DEBUG] Jimmie
    *** Script: [DEBUG] Melinda
    *** Script: [DEBUG] Jewel
    *** Script: [DEBUG] Sean
    *** Script: [DEBUG] Jacinto
    *** Script: [DEBUG] Krystle
    *** Script: [DEBUG] Billie
    *** Script: [DEBUG] Christian
    *** Script: [DEBUG] Naomi
    ...

    Stream – fromArray(Objekt-ARR)

    Gibt ein Stream-Objekt zurück, das die Werte aus dem angegebenen Array enthält.

    Hinweis:
    Diese Methode ist statisch. Sie benötigen keine Instanz der Klasse, um diese Methode zu verwenden.
    Tabelle : 14. Parameter
    Name Typ Beschreibung
    arr Array Array von Werten, aus denen der Stream erstellt werden soll.
    Tabelle : 15. Rückgaben
    Typ Beschreibung
    Stream Objekt, das zur Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    Dieses Beispiel zeigt, wie ein Stream-Objekt erstellt wird, das ein Array von Werten enthält.

    var nameStream = Stream.fromArray(['Bob', 'Sue', 'Sam'])
       .map(function (name) { 
          return name.toUpperCase(); 
       })
       .toArray(3);
    
    gs.info(JSON.stringify(nameStream));

    Ausgabe:

    ["BOB","SUE","SAM"]

    Stream – Limit (Anzahl)

    Begrenzt die Anzahl der vom Stream zurückgegebenen Ergebnisse.

    Um eine bessere Leistung zu erzielen, verwenden Sie Grenzwert () Methode in GlideQuery Klasse, wo möglich. Siehe GlideQuery . Möglicherweise müssen Sie diese Methode verwenden, um Ergebnisse mit einzuschränken Stream.flatMap() Methode.

    Tabelle : 16. Parameter
    Name Typ Beschreibung
    count Anzahl Anzahl der zurückzugebenden Datensätze.
    Tabelle : 17. Rückgaben
    Typ Beschreibung
    Stream Objekt, das zur Interaktion mit einem Stream von Elementen wie Datensätzen verwendet wird.

    Dieses Beispiel zeigt, wie Sie die von zurückgegebenen Ergebnisse einschränken können Stream.flatMap() Methode.

    var records = new global.GlideQuery('sys_user')
       .where('last_login', '>', '2015-12-31')
       .select('first_name', 'last_name')
       .flatMap(function (u) {
          return new GlideQuery('task')
               .where('closed_by', u.sys_id)
               .select('closed_at', 'description')
               .map(function (t) {
                    return {
                        first_name: u.first_name,
                        last_name: u.last_name,
                        description: t.description,
                        closed_at: t.closed_at
                     };
               });
          })
       .limit(5)
       .forEach(function (task){
          gs.info(JSON.stringify(task, null, 2));
       });

    Ausgabe:

    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:16"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:22"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:27"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:31"
    }
    *** Script: {
      "first_name": "System",
      "last_name": "Administrator",
      "description": null,
      "closed_at": "2021-10-04 13:40:54"
    }

    Stream – Map(Funktion FN)

    Wendet eine Funktion auf jedes Element in einem Stream an und gibt das aktualisierte Stream-Objekt zurück.

    Tabelle : 18. Parameter
    Name Typ Beschreibung
    fn Funktion Funktion, die auf das Ergebnis der Abfrage angewendet werden soll, die jedes Element im Stream als Eingabe verwendet.
    Tabelle : 19. Rückgaben
    Typ Beschreibung
    Stream Objekt, das den Stream von Datensätzen enthält, die nach dem Anwenden der Funktion aktualisiert wurden.

    Dieses Beispiel zeigt, wie Sie eine Funktion auf jedes Element im Stream anwenden.

    var users = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .map(function (u) { 
          return u.first_name.toUpperCase(); 
       })
       .toArray(100);
    
    gs.info(JSON.stringify(users));

    Ausgabe:

    [
       "SURVEY",
       "LUCIUS",
       "JIMMIE",
       "MELINDA",
       "JEWEL",
       "SEAN",
       "JACINTO",
       "KRYSTLE",
       "BILLIE",
       "CHRISTIAN",
       ...
    ]

    Stream – Reduzieren(function reducerFn, any initialValue)

    Führt für jedes Element im Stream eine Reduzierfunktion aus, was zu einem einzelnen Ausgabewert führt.

    Diese Methode ähnelt dem nativen JavaScript Reduzieren () Methode. Weitere Informationen finden Sie unter W3school-Dokumentation .

    Tabelle : 20. Parameter
    Name Typ Beschreibung
    ReduzierFn Funktion Funktion, die auf jedes Element im Stream angewendet werden soll, das den Stream auf einen einzelnen Wert reduziert. Diese Funktion muss zwei Argumente verwenden:
    • acc : Akkumulator, der alle von der Funktion zurückgegebenen Werte sammelt.
    • cur : Aktuelles Element, das im Array angesammelt wird.
    InitialValue Beliebig Wert, der an die Funktion als Anfangswert übergeben wird.
    Tabelle : 21. Rückgaben
    Typ Beschreibung
    Beliebig Kumulierte Summe aller Elemente, die von der Reduzierfunktion zurückgegeben werden.

    Dieses Beispiel zeigt, wie Sie den Datensatz mit dem längsten Namen aus der Anwendertabelle zurückgeben.

    var longestName = new global.GlideQuery('sys_user')
       .whereNotNull('first_name')
       .select('first_name')
       .reduce(function (acc, cur) {
           return cur.first_name.length > acc.length
               ? cur.first_name
               : acc;
           }, '');
    
    gs.info(JSON.stringify(longestName));

    Ausgabe:

    "ATF_TestItilUser1"

    Stream – some(Funktionsprädikat)

    Wendet auf jedes Element im Stream eine Prädikatfunktion an, eine Funktion, die einen einzelnen Wert verwendet und „wahr“ oder „falsch“ zurückgibt. Wenn das Prädikat für ein Element im Stream „wahr“ zurückgibt, gibt die Methode „wahr“ zurück.

    Tabelle : 22. Parameter
    Name Typ Beschreibung
    Prädikat Funktion Prädikatfunktion, die auf die Elemente im Stream-Objekt angewendet werden soll. Muss einen booleschen Wert zurückgeben.
    Tabelle : 23. Rückgaben
    Typ Beschreibung
    Boolean

    Kennzeichnung, die angibt, ob die Prädikatfunktion für ein Element im Stream „wahr“ zurückgegeben hat.

    Gültige Werte:
    • Wahr: Die Prädikatfunktion hat „wahr“ für ein Element im Stream zurückgegeben.
    • Falsch: Die Prädikatfunktion hat für ein Element im Stream nicht „wahr“ zurückgegeben.

    Dieses Beispiel zeigt, wie überprüft wird, ob Beschreibungen in der Aufgabentabelle länger als 1.000 Zeichen sind.

    var hasLongDescriptions = new global.GlideQuery('task')
       .whereNotNull('description')
       .select('description')
       .some(function (t) { 
          return t.description.length > 1000; 
       });
    
    
    gs.info(hasLongDescriptions);

    Ausgabe:

    false

    Stream – toArray (Anzahl)

    Gibt ein Array zurück, das die angegebene Anzahl von Elementen aus dem Stream enthält.

    Tabelle : 24. Parameter
    Name Typ Beschreibung
    count Anzahl Die maximale Anzahl von Elementen aus dem Stream, die im Array zurückgegeben werden sollen.
    Tabelle : 25. Rückgaben
    Typ Beschreibung
    Array Array, das die angegebene Anzahl von Elementen aus dem Stream enthält.

    Dieses Beispiel zeigt, wie Sie einen Stream von Datensätzen in ein JavaScript-Array umwandeln.

    var users = new global.GlideQuery('sys_user')
        .limit(10)
        .select('first_name', 'last_name')
        .toArray(50);
    
    gs.info(JSON.stringify(users));

    Ausgabe:

    [
       {
          "first_name":"Jewel",
          "last_name":"Agresta",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d64"
       },
       {
          "first_name":"Sean",
          "last_name":"Bonnet",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d6d"
       },
       {
          "first_name":"Jacinto",
          "last_name":"Gawron",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d76"
       },
       {
          "first_name":"Krystle",
          "last_name":"Stika",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d7f"
       },
       {
          "first_name":"Billie",
          "last_name":"Cowley",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d88"
       },
       {
          "first_name":"Christian",
          "last_name":"Marnell",
          "sys_id":"02826bf03710200044e0bfc8bcbe5d91"
       }
    ]