unwind new multiple joins fields mongodb

new - diferencia entre el agregado($ match) y el hallazgo, en MongoDB?



mongodb unwind multiple fields (2)

¿Por qué la salida agregada no vuelve como un DBCursor o una lista?

El marco de agregación se creó para resolver problemas sencillos que, de lo contrario, requerirían reducir el mapa.

Este marco se usa comúnmente para calcular datos que requieren la db completa como entrada y pocos documentos como salida.

¿Cuál es la diferencia entre el operador $ match usado dentro de la función agregada y el hallazgo regular en Mongodb?

Una de las diferencias, como usted dijo, es el tipo de retorno. Las operaciones de búsqueda de salida se devuelven como un DBCursor .

Otras diferencias:

  • El resultado de la agregación debe ser inferior a 16MB . Si está utilizando shards , los datos completos se deben recopilar en un solo punto después de los primeros $group u $sort .
  • El único propósito de $ match es mejorar el poder de la agregación, pero tiene otros usos, como mejorar el rendimiento de la agregación.

y también ¿por qué no podemos obtener un recuento de los documentos que se devuelven?

Usted puede. Solo cuente el número de elementos en la matriz resultante o agregue el siguiente comando al final de la tubería:

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

¿Por qué la función de búsqueda no permite cambiar el nombre de los nombres de campo como la función de agregado?

MongoDB es joven y las características siguen llegando. Tal vez en una futura versión podamos hacer eso. Cambiar el nombre de los campos es más crítico en la agregación que en la búsqueda .

EDIT (2014/02/26):

Las operaciones de agregación de MongoDB 2.6 devolverán un cursor .

EDITAR (2014/04/09):

MongoDB 2.6 fue lanzado con los cambios de agregación previstos .

¿Cuál es la diferencia entre el operador $match usado dentro de la función agregada y el find regular en Mongodb?

¿Por qué la función de find no permite cambiar el nombre de los nombres de campo como la función de agregado? Por ejemplo, en conjunto podemos pasar la siguiente cadena:

{ "$project" : { "OrderNumber" : "$PurchaseOrder.OrderNumber" , "ShipDate" : "$PurchaseOrder.ShipDate"}}

Considerando que, encontrar no permite esto.

¿Por qué la salida agregada no vuelve como un DBCursor o una lista? y también ¿por qué no podemos obtener un recuento de los documentos que se devuelven?

Gracias.


Investigué algunas cosas sobre la agregación y la búsqueda de llamadas: lo hice con una clasificación descendente en una tabla de documentos de 160k y limité mi producción a unos pocos documentos.

  1. El comando Aggregation es más lento que el comando find.
  2. Si accede a los datos como ToList() el comando de agregación es más rápido que el hallazgo.
  3. Si observa los tiempos totales (punto 1 + 2), los comandos parecen ser iguales.

Tal vez la agregación llama automáticamente a ToList() y no tiene que volver a llamar. Si no llama a ToList() después, la llamada a find() será mucho más rápida.

7 [ms] vs 50 [ms] (5 documentos)