我有一个看起来像这样的MongoDB集合
source1 < souce2
or
source1 == source2 and target1 < target2
这表示两个用户之间的交易。 我想做的是按日期对数据进行分类。
因此,如果我在15-05-2018有三笔交易,在2018年5月16日有四笔交易,我想将它们分组
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]
});
PS。为了方便起见,我写了15-05-2018。实际上,数据将是时间戳。
如何进行这项工作?
我四处搜寻,发现应该使用mongoose / mongodb的聚合功能,但是我不明白如何使它工作。
注意: 我正在将NodeJS,ExpressJS和MongoDB与Mongoose结合使用。
答案 0 :(得分:0)
这是使用聚合框架解决猫鼬问题的方法,因为您没有表示要匹配Transaction
模型上的任何条件。您可以将日期格式化为问题中使用的示例。
Transaction.aggregate([
{
"$addFields": {
"createdDate": {
$dateToString: { format: "%d-%m-%Y", date: "$createdDate" }
}
}
},
{
"$group": {
"_id": { "$createdDate" },
"transactions": {
"$push": "$$ROOT"
}
}
}])
这些是mongodb doc网站上的一些参考资料,可帮助您更好地理解聚合。
我也建议您将mongodb documentation site用于大多数参考,因为它包含许多有用的信息,可帮助您轻松理解这些概念。