【问题标题】:Aggregate Unwind Mongo Object聚合展开 Mongo 对象
【发布时间】:2020-04-17 05:01:13
【问题描述】:

我在 MongoDB 中有一个具有 object 类型的视图属性的文档:

{
    "_id" : ObjectId("5c5adc896dbc05c93a8a0fc9"),
    "date" : ISODate("2019-02-06T00:00:00.000Z"),
    "partner_id" : 36,
    "partner_user_id" : 163,
    "partner_user_name" : "Adriano",
    "view" : {
        "webbundlecontrollersecurecontroller" : 1,
        "webbundlecontrollerclientcontroller" : 1,
        "webbundlecontrollerordercontroller" : 6
    }
}

我需要执行一个返回如下内容的查询:

{
    "_id" : ObjectId("5c5adc896dbc05c93a8a0fc9"),
    "date" : ISODate("2019-02-06T00:00:00.000Z"),
    "partner_id" : 36,
    "partner_user_id" : 163,
    "partner_user_name" : "Adriano",
    "controller" : "webbundlecontrollersecurecontroller"
    "total": 1
},
{
    "_id" : ObjectId("5c5adc896dbc05c93a8a0fc9"),
    "date" : ISODate("2019-02-06T00:00:00.000Z"),
    "partner_id" : 36,
    "partner_user_id" : 163,
    "partner_user_name" : "Adriano",
    "controller" : "webbundlecontrollerclientcontroller"
    "total": 1
},
{
    "_id" : ObjectId("5c5adc896dbc05c93a8a0fc9"),
    "date" : ISODate("2019-02-06T00:00:00.000Z"),
    "partner_id" : 36,
    "partner_user_id" : 163,
    "partner_user_name" : "Adriano",
    "controller" : "webbundlecontrollerordercontroller"
    "total": 6
}

基本上将第一个文档上的视图对象属性转换为 3 个新对象。我尝试使用带有展开的聚合,但不确定如何执行此操作的最佳查询。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我能够使用 objectToArray 进行查询以转换对象,然后展开并构建我的最终查询。

    db.pmm_page_view.aggregate(
       [
          {
             $project: {
                date: 1,
                partner_id: 1,
                partner_user_id: 1,
                partner_user_name: 1, 
                view: { $objectToArray: "$view" }
             }
          },
          { $unwind: "$view" },
          {
             $project: {
                date: 1,
                partner_id: 1,
                partner_user_id: 1,
                partner_user_name: 1, 
                controller: "$view.k",
                total: "$view.v"
             }
          }
       ]
    )
    

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 2021-12-21
      • 1970-01-01
      • 2017-08-29
      • 2023-03-28
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多