mongodb - mongos aggregation 执行出错
PHP中文网
PHP中文网 2017-04-22 08:59:32
0
2
871

我想用mongo的聚合算个uv,但下面的命令,如图:

报错,aggregation result exceeds maximum document size (16MB)

文档中提到这个问题如图, http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/,

请各位帮忙看看
感谢

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
Peter_Zhu

Il y a trop de données à traiter. Vous pouvez utiliser $project pour sélectionner d'abord le champ suivant, puis le regrouper,

{$project:{
    xxx : 1,
    yyy : 1,
  }
}...
PHPzhong

La syntaxe est correcte. J'ai essayé les données suivantes sur ma machine :

> db.uv.find()
{ "_id" : ObjectId("52a102490e085e51aa153478"), "ip" : "127.0.0.1" }
{ "_id" : ObjectId("52a1024b0e085e51aa153479"), "ip" : "127.0.0.2" }
{ "_id" : ObjectId("52a1024c0e085e51aa15347a"), "ip" : "127.0.0.2" }
{ "_id" : ObjectId("52a1024e0e085e51aa15347b"), "ip" : "127.0.0.3" }

En plus du match, j'utilise la requête d'agrégation suivante :

db.uv.aggregate({
  $group: {
    _id: "$ip",
    uv: {
      $first: 1
    }
  }
}, {
  $group: {
    _id: "result",
    uv: {
      $sum: "$uv"
    }
  }
})

Le résultat est correct

{ "result" : [ { "_id" : "result", "uv" : 3 } ], "ok" : 1 }

Étant donné que le résultat final n'est qu'un seul chiffre, il ne devrait pas y avoir une telle erreur. À des fins de débogage, il est recommandé d'afficher les résultats de chaque étape du pipeline. Ajoutez { $limit: 3 } après l'étape à afficher et exécutez la sortie sans suivre les étapes. S'il y a trop de données et que le résultat est trop lent, ajoutez une limite au début et exécutez-le d'abord sur de petites données.

S'il n'est pas pratique de le modifier encore et encore et de l'exécuter dans le shell, écrivez-le simplement dans un fichier, dans terminal

$ mongo < agg_uv.js

La redirection d'entrée ne peut pas être omise, sinon elle s'exécutera en mode script, ce qui est quelque peu différent du mode interactif.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal