2016-01-08 1 views
1

Voici ma question:

db.log.aggregate([{ 
    $match: { 
     "meta.userId": { 
      $exists: true, 
      $ne: null 
     }, 
     "timestamp": { 
      $gte: ISODate("2016-01-01"), 
      $lte: ISODate("2016-01-07") 
     } 
    } 
}, { 
    $group: { 
     _id: "$meta.userId", 
     count: { 
      $sum: 1 
     } 
    } 
}]) 

Lors de l'utilisation { $sum: 1 } dans la canalisation d'agrégation, la coquille retourne un à double. Je voudrais qu'il retourne directement un entier car c'est juste un compte de documents. Une idée de la façon dont je pourrais changer le type de somme?

{ 
"result" : [ 
    { 
     "_id" : "foo", 
     "count" : 46.0000000000000000 
    }, 
    { 
     "_id" : "foo1", 
     "count" : 146.0000000000000000 
    } 
], 
"ok" : 1.0000000000000000 
} 

Ma version de MongoDB est 3.0.7. J'utilise Robomongo 0.8.5.

Merci!

Répondre

2

Vous pouvez spécifier explicitement la valeur 1 est un entier utilisant NumberInt, voir ce ticket JIRA. Ceci n'est normalement pas nécessaire lors de l'exécution de requêtes similaires dans le shell MongoDB, cela peut donc être une fonctionnalité de Robomongo.

db.log.aggregate([{ 
    $match: { 
     "meta.userId": { 
      $exists: true, 
      $ne: null 
     }, 
     "timestamp": { 
      $gte: ISODate("2016-01-01"), 
      $lte: ISODate("2016-01-07") 
     } 
    } 
}, { 
    $group: { 
     _id: "$meta.userId", 
     count: { 
      $sum: NumberInt(1) 
     } 
    } 
}]) 
+0

Cela a fonctionné parfaitement, merci! – Jbalberge