代码之家  ›  专栏  ›  技术社区  ›  Sriram R

根据日期对数据进行分类

  •  0
  • Sriram R  · 技术社区  · 6 年前

    我有一个MongoDB系列,看起来像这样

    const TransactionSchema = mongoose.Schema({
      user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
      },
      transactionType: {
        type: String,
        enum: [transactionTypes.TRANSACTION_EXPENSE, transactionTypes.TRANSACTION_INCOME],
        required: true
      },
      amount: {
        type: Number,
        required: true
      },
      paymentType: {
        type: String,
        enum: [
          transactionPaymentTypes.PAYMENT_CARD,
          transactionPaymentTypes.PAYMENT_CASH
        ],
        required: true
      },
      createdDate: {
        type: Date,
        default: Date.now
      },
      description: String,
      tags: [String]
    });
    

    这表示两个用户之间的事务。 我想做的是按日期对数据进行分类。

    因此,如果2018年5月15日有3笔交易,2018年5月16日有4笔交易,我想将它们分类如下

    [
    {
    date: "15-05-2018",
    transactions: [Transaction]
    },
    {
    date: "16-05-2018",
    transactions: [Transaction]
    }
    ]
    

    另外,我写了15-05-2018只是为了方便。实际上,数据将是一个时间戳。

    怎么能做到这一点?

    我在google上搜索,发现我们应该使用mongoose/mongodb的聚合功能,但我不明白如何使其工作。

    注:

    1 回复  |  直到 6 年前
        1
  •  0
  •   Xixis    6 年前

    这是如何在mongoose中使用聚合框架来解决您的问题,因为您没有指示要匹配 Transaction 模型。您可以将日期格式化为您在问题中使用的样本。

    Transaction.aggregate([
      { 
         "$addFields": {
            "createdDate": {
               $dateToString: { format: "%d-%m-%Y", date: "$createdDate" }
            }
         }
      },
      { 
         "$group": {
            "_id": { "$createdDate" },
            "transactions": {
                "$push": "$$ROOT"
            }
         }
      }])
    

    以下是一些来自mongodb文档站点的参考资料,可以帮助您更好地理解聚合。

    DateToString , Group , Push

    我也建议你使用 mongodb documentation site