sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB map()

I MongoDB, cursor.map() Metoden tillämpar en funktion på varje dokument som markören besöker och kombinerar returvärdena i en array.

Syntax

Syntaxen ser ut så här:

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

Där samling är namnet på samlingen som handlingarna finns i.

Och där är funktionen som ska tillämpas på varje dokument som markören besöker.

Exempel

Anta att vi har en samling som heter produkter som innehåller följande tre dokument:

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

Vi kan använda map() metod i kombination med find() metod för att iterera genom dessa dokument, samtidigt som en funktion tillämpas på varje dokument.

Exempel:

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

Resultat:

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

I det här fallet itererade vi genom markören och ersatte instanser av strängen Left med Höger . Vi returnerade sedan resultatet.

Resultatet returneras som en array.

Fel?

Om du får ett felmeddelande, så här:

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

Se till att du använder find() och inte findOne() .

findOne() metod returnerar det faktiska dokumentet och inte en markör. Därför map() fungerar inte med findOne() . Även om det fungerade, findOne() returnerar bara ett enda dokument, och därför skulle det inte finnas något behov av att upprepa flera dokument.


  1. Hur växlar man ett booleskt fält i ett dokument med atomär drift?

  2. Får du ett anslutningsfel när du använder redis-trib.rb för att skapa ett kluster?

  3. Hur flyttar jag en redis-databas från en server till en annan?

  4. Jedis, kan inte få jedis-anslutning:kan inte hämta resurs från poolen