【问题标题】:Mongo query with group带组的 Mongo 查询
【发布时间】:2020-09-02 18:06:19
【问题描述】:

我有一个具有以下结构的 Mongo 集合,其中一个 transactionID 可以有多个页码。

现在我想这样做:

对于每一天(根据时间戳属性),我想 - 返回 transactionID 列表,其中所有页码为 processed=False

{
    "_id" : ObjectId("5d11f35a0c4fd2df3558cf80"),
    "DB" : "test1",
    "sid" : 8732,
    "filetype" : "csv",
    "processed" : "False",
    "pagesNo" : 3,
    "timestamp" : 1599068960,
    "transactionID" : 837423be237e2e
},
{
    "_id" : ObjectId("5d11f35a0c4fd2df3558cf80"),
    "DB" : "test1",
    "sid" : 8732,
    "filetype" : "csv",
    "processed" : "False",
    "pagesNo" : 4,
    "timestamp" : 1599068960,
    "transactionID" : 837423be237e2e
}

预期输出:

 {
   "transacionID" : "837423be237e2e",
   "sid" : "8732"
   "datetime" : "2020-09-02"
   }

我已经到这里了,我是否能够根据 transactionID 对结果进行分组

var pipeline = [
    {
        "$group": {
            "_id": "$transactionID",
            "total": { "$sum": 1 },
            "sid": { "$first": "$sid"}
        }
    }, 
    
];
    
    
db.items.aggregate(pipeline)

【问题讨论】:

    标签: database mongodb mongodb-query


    【解决方案1】:

    为了得到输出,我们需要使用 UNIX 时间戳

    [
      {
        $match: {
          processed: "False"
        }
      },
      {
        "$group": {
          "_id": "$transactionID",
          "total": {
            "$sum": 1
          },
          "sid": {
            "$first": "$sid"
          },
          date: {
            $first: {
              $toDate: {
                $multiply: [
                  "$timestamp",
                  1000
                ]
              }
            }
          }
        }
      }
    ]
    

    工作Mongo playground

    【讨论】:

    • 不确定...为什么但它显示 Nameerror processed is not defined 但该字段是他们的。我尝试使用 $processed,但同样的错误
    • @prashantitis 尝试用双引号将processed 括起来并再次测试。
    • @prashantitis 如果答案对您有帮助,请点击打勾并投票以帮助寻求此类问题的人
    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多