mongodb - 为什么下面的 mongodb 组查询总是返回 0?

标签 mongodb aggregation-framework

我有下面的样例json,看起来并不太难。 基本上我试图按算法字段对所有对象进行分组,然后从 $difference.close 字段计算平均值。

下面是一个示例对象

{
    "_id" : ObjectId("56b0c702c783c42f504f006c"),
    "symbol" : "ALSK",
    "algorithm" : "AvgForecaster",
    "date" : "2016-02-01",
    "real_quote" : {
        "trade_date" : "2016-02-01",
        "open" : "1.6",
        "close" : "1.59",
        "low" : "1.57",
        "high" : "1.66",
        "volume" : "65600",
        "symbol" : "ALSK",
        "adjusted_close" : "1.59"
    },
    "forecasted_quote" : {
        "trade_date" : "2016-02-01",
        "open" : "0.0",
        "close" : "1.92",
        "low" : "0.0",
        "high" : "0.0",
        "volume" : "0",
        "symbol" : "ALSK",
        "adjusted_close" : "0.0"
    },
    "difference" : {
        "trade_date" : "2016-02-01",
        "open" : "1.6",
        "close" : "-0.33",
        "low" : "1.57",
        "high" : "1.66",
        "volume" : "65600",
        "symbol" : "ALSK",
        "adjusted_close" : "1.59"
    }
}

则查询如下:

db.getCollection('Accuchecks').aggregate([
{
    $group: {
        _id: "$algorithm",
        accuracy: {$avg: "$difference.close"}
     }
}])

然后我得到以下结果:

{
    "result" : [ 
        {
            "_id" : "DeltaForecaster",
            "accuracy" : 0.0000000000000000
        }, 
        {
            "_id" : "AvgForecaster",
            "accuracy" : 0.0000000000000000
        }
    ],
    "ok" : 1.0000000000000000
}

查询可能没有选择 $difference.close 字段吗?在整个集合中,该值几乎从不为 0。

谢谢

最佳答案

您将返回 0,因为您将 close 值存储为字符串而不是 float 。聚合管道中没有可用的类型转换函数,因此您必须将值存储为数值,请参阅 post关于如何更改现有数据的类型。

{
    "_id" : ObjectId("56b0c702c783c42f504f006c"),
    "symbol" : "ALSK",
    "algorithm" : "AvgForecaster",
    "date" : "2016-02-01",
    "real_quote" : {
        "trade_date" : "2016-02-01",
        "open" : 1.6,
        "close" : 1.59,
        "low" : 1.57,
        "high" : 1.66,
        "volume" : 65600,
        "symbol" : "ALSK",
        "adjusted_close" : 1.59
    },
    "forecasted_quote" : {
        "trade_date" : "2016-02-01",
        "open" : 0.0,
        "close" : 1.92,
        "low" : 0.0,
        "high" : 0.0,
        "volume" : 0,
        "symbol" : "ALSK",
        "adjusted_close" : 0.0
    },
    "difference" : {
        "trade_date" : "2016-02-01",
        "open" : 1.6,
        "close" : -0.33,
        "low" : 1.57,
        "high" : 1.66,
        "volume" : "65600",
        "symbol" : "ALSK",
        "adjusted_close" : .59
    }
}

关于mongodb - 为什么下面的 mongodb 组查询总是返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35182895/

相关文章:

Mongodb group by 和 sum 并使用 Map 获取媒体

sql - 如何避免在 MongoDB(使用 Mongoid)或 ActiveRecord(使用 MySQL 的 Rails)中插入两次相同的记录?

mongodb - 检索具有包含另一个文档属性的数组的文档

查找后的MongoDB聚合项目

mongodb - 使用 Mongo 按组计算多个不同的字段

python - 如何检索两个字段值与 pymongo 相等的所有文档?

node.js - MongoDb 按日期分组并分页

javascript - MongoDB 中的 "Generic Collection"?

node.js - Mongoose :简单的自定义验证功能不起作用

aggregation-framework - Spring Data MongoDB 聚合 - 在投影中重命名 _id