【问题标题】:MongoDB SELECT * GROUP BYMongoDB 选择 * 分组依据
【发布时间】:2020-09-28 08:36:12
【问题描述】:

我正在玩 MongoDB,试图弄清楚如何做一个简单的

SELECT * FROM data GROUP BY userid

但我不知道怎么做?我有一个像

这样的集合
data=[{
    _id: "Kcs93S4R9v",
    userid: "KqDuEwgv",
    time: 1584353953159,
    content: {}
}, {
    _id: "3d0c4375",
    userid: "LqDuEwgv",
    time: 1584353953159,
    content: {}
}, {
    _id: "574ee87",
    userid: "LqDuEwgv",
    time: 1584353953159,
    content: {}
}, {
    _id: "Pcs93S4R9v",
    userid: "KqDuEwgv",
    time: 1584353953159,
    content: {}
}]

我希望输出是这样的

[{
    _id: "Kcs93S4R9v",
    userid: "KqDuEwgv",
    time: 1584353953159,
    content: [{}, {}]
}, {
        _id: "574ee87",
        userid: "LqDuEwgv",
        time: 1584353953159,
        content: [{}, {}]
}]

但我似乎无法弄清楚。有没有办法用 MongoDB 做到这一点?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    您需要在聚合中使用$group 运算符。如下:

    db.collection.aggregate([
      {
        $group: {
          _id: "$userid",
          time: {
            $first: "$time"
          },
          content: {
            $push: "$content"
          }
        }
      }
    ])
    

    MongoPlayGroundLink

    编辑: 要首先将文档与time 字段匹配,可以使用$match 运算符,

    db.collection.aggregate([
      {
        $match: {
          time: 1584353953159
        }
      },
      {
        $group: {
          _id: "$userid",
          time: {
            $first: "$time"
          },
          content: {
            $push: "$content"
          }
        }
      }
    ])
    

    【讨论】:

    • 如果我必须根据时间进行此查询该怎么办,例如在特定时间戳中查找用户?
    • 你的意思是找到特定时间的用户,然后像上面那样对他们进行分组?
    • 是的,这是必需的。
    • 我已经更新了我的答案,你需要使用$match运营商。
    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2021-07-09
    相关资源
    最近更新 更多