$$$$ lookup值在$ group之后不显示

问题描述 投票:0回答:1

我有2个相关集合,我想进行一个$lookup

  1. 开关
{ 
    "_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "relay" : NumberInt(1), 
    "name" : "Lampu Tengah", 
    "voltage" : 80.0, 
    "duration" : null, 
    "status" : true, 
    "triggered_by" : ObjectId("5e5fd642fce106005319e884"), 
    "created_at" : ISODate("2020-04-01T15:41:36.588+0000"), 
    "updated_at" : ISODate("2020-04-01T22:59:39.261+0000")
}
{ 
    "_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "relay" : NumberInt(2), 
    "name" : "Kipas Angin", 
    "voltage" : 100.0, 
    "duration" : null, 
    "status" : true, 
    "triggered_by" : ObjectId("5e5fd642fce106005319e884"), 
    "created_at" : ISODate("2020-04-01T15:45:48.099+0000"), 
    "updated_at" : ISODate("2020-04-01T15:45:48.099+0000")
}
  1. power_usage_month
{ 
    "_id" : ObjectId("5e87edffffba850e8d72ce27"), 
    "switch_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 19.345, 
    "time_minutes" : NumberInt(123), 
    "created_at" : ISODate("2020-04-02T15:01:37.521+0000"), 
    "updated_at" : ISODate("2020-04-02T15:01:37.521+0000")
}
{ 
    "_id" : ObjectId("5e87ee06ffba850e8d72ce28"), 
    "switch_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 17.5, 
    "time_minutes" : NumberInt(123), 
    "created_at" : ISODate("2020-04-03T20:35:09.870+0000"), 
    "updated_at" : ISODate("2020-04-03T20:35:09.871+0000")
}
{ 
    "_id" : ObjectId("5e87ee0cffba850e8d72ce29"), 
    "switch_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 19.345, 
    "time_minutes" : NumberInt(124), 
    "created_at" : ISODate("2020-04-04T01:45:00.000+0000"), 
    "updated_at" : ISODate("2020-04-04T01:45:00.000+0000")
}
{ 
    "_id" : ObjectId("5e87ee13ffba850e8d72ce2a"), 
    "switch_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 17.5, 
    "time_minutes" : NumberInt(124), 
    "created_at" : ISODate("2020-04-04T01:45:00.000+0000"), 
    "updated_at" : ISODate("2020-04-04T01:45:00.000+0000")
}
{ 
    "_id" : ObjectId("5e87ee18ffba850e8d72ce2b"), 
    "switch_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 19.345, 
    "time_minutes" : NumberInt(125), 
    "created_at" : ISODate("2020-04-04T01:45:00.000+0000"), 
    "updated_at" : ISODate("2020-04-04T01:45:00.000+0000")
}
{ 
    "_id" : ObjectId("5e87ee20ffba850e8d72ce2c"), 
    "switch_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 17.5, 
    "time_minutes" : NumberInt(125), 
    "created_at" : ISODate("2020-04-04T01:45:00.000+0000"), 
    "updated_at" : ISODate("2020-04-04T01:45:00.000+0000")
}
{ 
    "_id" : ObjectId("5e87ee26ffba850e8d72ce2d"), 
    "switch_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 19.345, 
    "time_minutes" : NumberInt(126), 
    "created_at" : ISODate("2020-04-04T01:45:00.000+0000"), 
    "updated_at" : ISODate("2020-04-04T01:45:00.000+0000")
}
{ 
    "_id" : ObjectId("5e87ee2dffba850e8d72ce2e"), 
    "switch_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "device_id" : ObjectId("5e7d83efd62c242a11e3ca5e"), 
    "current" : 17.5, 
    "time_minutes" : NumberInt(126), 
    "created_at" : ISODate("2020-04-04T01:45:00.000+0000"), 
    "updated_at" : ISODate("2020-04-04T01:45:00.000+0000")
}

现在我想使用$ lookup和$project“加入”这些集合,但我想显示的字段显然不显示$project值,但是我执行了$group。这是我的查询

db.getCollection("power_usages_month").aggregate(
    [
        { 
            "$project" : { 
                "_id" : NumberInt(0), 
                "power_usages_month" : "$$ROOT"
            }
        }, 
        { 
            "$lookup" : { 
                "localField" : "power_usages_month.switch_id", 
                "from" : "switches", 
                "foreignField" : "_id", 
                "as" : "switches"
            }
        }, 
        { 
            "$unwind" : { 
                "path" : "$switches", 
                "preserveNullAndEmptyArrays" : false
            }
        }, 
        { 
            "$group" : { 
                "_id" : "$power_usages_month.switch_id",
                "sum_current" : { 
                    "$sum" : "$power_usages_month.current"
                }
            }
        }, 
        { 
            "$project" : { 
                "switch_id" : "$_id", 
                "device_id" : "$switches.device_id",
                "sum_current" : "$sum_current", 
                "voltage" : "$switches.voltage",
            }
        }
    ], 
    { 
        "allowDiskUse" : true
    }
);

"device_id" : "$switches.device_id","voltage" : "$switches.voltage"不能根据结果出现预期的效果:

{ 
    "_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "switch_id" : ObjectId("5e8454bc95c85ca0c33a9463"), 
    "sum_current" : 70.0
}
{ 
    "_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "switch_id" : ObjectId("5e8453c095c85ca0c33a9461"), 
    "sum_current" : 77.38
}

怎么可能?请告诉我查询的错误。

我有2个相关的收藏夹,我想进行$ lookup。开关{“ _id”:ObjectId(“ 5e8453c095c85ca0c33a9461”),“ device_id”:ObjectId(“ 5e7d83efd62c242a11e3ca5e”),“ relay”:...

mongodb nosql bson nosql-aggregation
1个回答
0
投票

您可以在完成分组后将项目作为最后一步,然后$lookup您也可以处理小组中的所有工作,您将在$group中包含的内容仅在查询中与您一起使用,但可以说,您需要将每个开关使用的power_usages_month文档收集到该开关的一个阵列中,但您不需要power_usages_month中的所有信息,只需要currenttime_minutes就可以了

© www.soinside.com 2019 - 2024. All rights reserved.