sql >> Database >  >> NoSQL >> MongoDB

verschil tussen aggregaat ($ match) en vinden, in MongoDB?

Waarom keert de geaggregeerde output niet terug als een DBCursor of een lijst?

Het aggregatieraamwerk is gemaakt om eenvoudige problemen op te lossen die anders een kaartverkleining zouden vereisen.

Dit raamwerk wordt vaak gebruikt om gegevens te berekenen waarvoor de volledige db als invoer en een paar documenten als uitvoer nodig zijn.

Wat is het verschil tussen de $match-operator die in de aggregatiefunctie wordt gebruikt en de normale vondst in Mongodb?

Een van de verschillen, zoals u al zei, is het retourtype. Zoek uitvoer van bewerkingen terug als een DBCursor .

Andere verschillen:

  • Het aggregatieresultaat moet kleiner zijn dan 16 MB. Als u shards gebruikt, moeten de volledige gegevens op één punt worden verzameld na de eerste $group of $sort .
  • $match enige doel is om de kracht van aggregatie te verbeteren, maar het heeft een aantal andere toepassingen, zoals het verbeteren van de aggregatieprestaties.

en ook waarom kunnen we geen telling krijgen van de documenten die worden geretourneerd?

Jij kan. Tel gewoon het aantal elementen in de resulterende array of voeg het volgende commando toe aan het einde van de pipe:

{$group: {_id: null, count: {$sum: 1}}}

Waarom staat de zoekfunctie het niet toe om de veldnamen te hernoemen zoals de aggregatiefunctie?

MongoDB is jong en er komen nog steeds functies aan. Misschien dat we dat in een toekomstige versie kunnen doen. Het hernoemen van velden is belangrijker bij aggregatie dan in vinden .

BEWERKEN (2014/02/26):

MongoDB 2.6-aggregatiebewerkingen geven een cursor terug.

BEWERKEN (2014/04/09):

MongoDB 2.6 is uitgebracht met de voorspelde aggregatiewijzigingen.



  1. Hoe 100 miljoen records in MongoDB te laden met Scala voor prestatietests?

  2. Een structuur voor aggregatie genereren

  3. MongoDB cursor.count()

  4. Overweeg de bovenstaande items opnieuw te bekijken of een bean van het type 'org.springframework.data.redis.core.RedisTemplate' in uw configuratie te definiëren