【问题标题】:Transform and group documents in MongoDB在 MongoDB 中转换和分组文档
【发布时间】:2015-08-08 00:08:14
【问题描述】:

我需要对 mongodb 集合中的文档进行转换。

文档结构示例:

{
    "_id" : ObjectId("530306d286ee881f7e6b4567"),
    "is_valid" : true,
    "is_visible" : false,
    "date" : ISODate("2014-02-18T07:07:23.000Z"),
    "product_type" : "book",
    "user_id" : 1234
},
{
    "_id" : ObjectId("530306d286ee881f7e8b4567"),
    "is_valid" : false,
    "is_visible" : true,
    "date" : ISODate("2014-02-18T07:07:23.000Z"),
    "product_type" : "cd",
    "user_id" : 5678
},
{
    "_id" : ObjectId("530306d286ee881f7e3b4567"),
    "is_valid" : true,
    "is_visible" : true,
    "date" : ISODate("2014-02-18T07:07:23.000Z"),
    "product_type" : "book",
    "user_id" : 3456
}

我需要按product_type 对这些文档进行分组,计算它们的字段并在单独的字段中列出所有user_id 值。结果应如下所示:

{
    "product_type" : "book",
    "user_ids" : [1234, 3456],
    "valid_count" : 2,
    "visible_count" : 1,
},
{
    "product_type" : "cd",
    "user_ids" : [5678],
    "valid_count" : 1,
    "visible_count" : 1,
},

我已设法按所有三个条件对它们进行分组,但无法使用 count 进行转换:

db.getCollection('test').aggregate([
    { 
        $match: {
            date: {
                $gt: ISODate("2014-08-07 10:43:16.000Z"),
                $lt: ISODate("2015-07-07 10:43:16.000Z")
            }
        }
    },
    {
        $group: { _id : { product_type: "$product_type", is_valid: "$is_valid", is_visible: "$is_visible"}, total : { $sum : 1 } }
    }
])

任何帮助表示赞赏。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    我能够使用以下查询获得您需要的内容:

    db.getCollection('test').aggregate([
      { 
        $match: {
          date: {
            $gt: ISODate("2014-08-07 10:43:16.000Z"),
            $lt: ISODate("2015-07-07 10:43:16.000Z")
          }
        }
      },
      {
        $project: {
          validInt: { $cond: ["$is_valid", 1, 0] },
          visibleInt: { $cond: ["$is_visible", 1, 0] },
          product_type: "$product_type",
          user_id: "$user_id"
        }
      },
      {
        $group: {
          _id : { product_type: "$product_type" },
          user_ids: { $addToSet: "$user_id" },
          valid_count: { $sum: "$validInt" },
          visible_count: { $sum: "$visibleInt" }
        }
      }
    ])
    

    我真的不知道是否有不同的方式将布尔值转换为整数值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-21
      • 2016-02-22
      • 2017-03-04
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多