我正在尝试从我的节点API发送带有 计数以及数据 的付费和非付费客户总列表。 在猫鼬方法中,我一直在思考如何走得更远。
任何人都可以提出实现这一目标的最佳方法吗?
router.get("/", ensureAuthenticated, (req, res) => {
Loan.aggregate([
{
$match: {
ePaidunpaid: "Unpaid"
}
}
]).then(function(data) {
console.log(data);
res.render("dashboard", { admin: req.user.eUserType, user: req.user,data:data });
});
});
贷款模式:
const Loan = new Schema({
sName: { type: String },
sPurpose: [String],
sBankName: String,
sBranchName: [String],
nTotalFees: { type: Number },
ePaidunpaid: { type: String ,default:'Unpaid'},
sCashOrCheque: { type: String },
});
结果: 有付费和未付费客户数的用户的详细信息
[
Paid:{
// Paid users
},
Unpaid:{
// Unpaid Users
},
]
答案 0 :(得分:2)
那么在这种情况下,试试这个 -
Loan.aggregate([
{
$group: {
_id: "$ePaidunpaid",
data: { $push: "$$ROOT" },
count: { $sum: 1 }
}
}
]);
输出将是这样的 -
{
"_id": "Paid",
"data": [
// All the documents having ePaidunpaid = Paid
{ _id: "asdasd123 1eqdsada", sName: "Some name", // Rest of the fields },
{ _id: "asdasd123 1eqdsada", sName: "Some name", // Rest of the fields }
],
count: 2
},
{
"_id": "Unpaid",
"data": [
// All the documents of having ePaidunpaid = Unpaid
{ _id: "asdasd123 1eqdsada", sName: "Some name", // Rest of the fields },
{ _id: "asdasd123 1eqdsada", sName: "Some name", // Rest of the fields }
],
count: 2
},
<强>解释强>
管道的第一阶段$group
根据ePaidunpaid
字段对所有文档进行分组,该字段只有两个值Paid
或Unpaid
,因此分别只呈现两个文档。
下一步是累积组合在一起的原始数据(文档)。这是通过在数据字段上使用$push
累加器来实现的,推送$$ROOT
有效地引用当前正由流水线阶段处理的文档。
由于您需要计算所有付费和未付费用户,因此需要$sum
累加器来计算每个组中的所有项目。