sql >> Database >  >> NoSQL >> MongoDB

MongoDB-kaart ()

In MongoDB, de cursor.map() methode past een functie toe op elk document dat door de cursor wordt bezocht en combineert de geretourneerde waarden in een array.

Syntaxis

De syntaxis gaat als volgt:

db.collection.find().map(<function>)

Waar collection is de naam van de collectie waarin de documenten zich bevinden.

En waar <function> is de functie die moet worden toegepast op elk document dat door de cursor wordt bezocht.

Voorbeeld

Stel dat we een verzameling hebben met de naam products die de volgende drie documenten bevat:

{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }

We kunnen de map() . gebruiken methode in combinatie met de find() methode om door die documenten te bladeren, terwijl u een functie op elk document toepast.

Voorbeeld:

db.products.find().map(
  function(p) {
    p = p.product.replace("Left","Right");
    return p;
  }
);

Resultaat:

[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]

In dit geval hebben we de cursor herhaald en instanties van de tekenreeks Left . vervangen met Right . We hebben het resultaat toen teruggestuurd.

Het resultaat wordt geretourneerd als een array.

Fout?

Als u een foutmelding krijgt, zoals deze:

uncaught exception: TypeError: db.products.findOne(...).map is not a function :
@(shell):1:1

Zorg ervoor dat u find() . gebruikt en niet findOne() .

De findOne() methode retourneert het eigenlijke document en niet een cursor. Daarom, map() werkt niet met findOne() . En zelfs als het wel zou werken, findOne() retourneert slechts één document en daarom is het niet nodig om door meerdere documenten te bladeren.


  1. Tips voor het upgraden van Percona Server voor MongoDB

  2. Maak een wildcard-index in MongoDB

  3. Is er een eenvoudige manier om de gegevens van een meteoor-app te exporteren?

  4. Servicestack Redis-lijst bijwerken