0

以下查询

db.getCollection("xyzCollection").aggregate(
    [
     { $match:
           { "startDate": { $gte: ISODate("2021-01-21T00:00:00.000+0000") } , "markets": { $exists: true }} 
     },
     { $group: 
           { _id: "$sportName" , "count": { $sum: 1 } }
     },
    ]
)

返回以下输出:

{ 
    "_id" : "Ice Hockey", 
    "count" : 138.0
}
{ 
    "_id" : "Basketball", 
    "count" : 141.0
}
{ 
    "_id" : "Cricket", 
    "count" : 14.0
}
{ 
    "_id" : "Volleyball", 
    "count" : 32.0
}
{ 
    "_id" : "Football", 
    "count" : 685.0
}

为什么是这样?我怎样才能让它返回一个int?我正在使用 Studio 3T 2020.10.1 来执行查询。我已经尝试过使用 $toInt (包装“1”或包装“{ $sum: 1 }”),但正如预期的那样它不起作用 - 语法错误。

谢谢。

4

2 回答 2

2

它会回来int

您可以$toInt$project管道中使用。

{
 $project: {
   sum: {$toInt :"$count" } 
 } 
}

样本

我认为这是由于 Robo3t/Studio3t

感谢@wernfried 提供了证明行为合理性的参考。

于 2021-01-21T03:16:06.273 回答
1

如果您的查询由 javascript 运行时执行(这是ISODate建议的用法,因为这不是 MQL 构造),则呈现结果的(相同)运行时只有一种数字类型,它是浮点类型。

使用以/利用另一种支持整数类型的语言编写的工具。

于 2021-01-21T03:49:36.773 回答