如何使用mongose、node、在数组中查找sum对象



这是我的收藏。。。

var emp = new Schema({
names: String,
details: [{
date: String,
wage: String,
sack: String,
sellername: String
}]
});

收集的可能输出

{   name: john
details: [{
date:12-01-2019
wage:210
sack:10
sellername: cristy   
}]
details: [{
date:12-01-2019
wage:210
sack:10
sellername: cristy
}]
details: [{
date:12-01-2019
wage:210
sack:10
sellername: cristy       
}]
}

我需要添加字段工资的值,并将其显示在车把模板中作为总数。。我需要的是通过过滤一些标准来总结对象数组中的工资值,我已经尝试了很多方法

Person.aggregate([{
"$match": {
"name": req.body.name
}
},
{
"$addFields": {
"total": {
"$sum": "$details.wage"
}
}
}
]).exec((err, data) => {
if (err) console.log(err);
console.log(data);
});

我的工作代码显示值

Person.find({
names: req.body.woker
}) // <=> wrapper for Model.find() ...
.then(documents => {
// create context Object with 'usersDocuments' key
const context = {
usersDocuments: documents.map(documents => {
return {
details: documents.details,
}
})
}
console.log(context.usersDocuments)
// rendering usersDocuments from context Object
res.render('employee/individuallist', {
employeeName: req.body.woker,
usersDocuments: context.usersDocuments,
})
})
.catch(error => res.status(500).send(error))
})

我的车把模板代码

<table class="table table-striped" id="list">
<thead>
<tr>
<th>Date</th>
<th>Work of (Seller Name)</th>
<th>Number of sacks</th>
<th>Kooli</th>
</tr>
</thead>
<tbody>

{{#each usersDocuments}}
{{#each this.details}}

<tr>
<td>{{this.date}}</td>
<td>{{this.sellername}}</td>
<td>{{this.chack}}</td>
<td>{{this.kooli}}</td>
</tr>

{{/each}}
{{/each}}

<tr>
<td colspan="3">Total Amount</td>
<td>{{this.total}}</td>
</tr>
</tbody>
</table> 

由于details是一个数组,您不能仅通过"$details.wage"来针对每个项目的wage,因此您可能需要展开(参见示例用法(该数组,该数组将生成多个条目,这些条目将具有一个details对象,您可以在其中使用details.wage

也许一个更简单的解决方案是使用reduce来聚合总数:

Person.aggregate([{
"$match": {
"name": req.body.name
}
},
{
"$addFields": {
"total": {
"$reduce": {
input: "$details",
initialValue: 0,
in: { 
$add: ["$$value", "$$this.wage"]
}
}
}
}
}
]).exec((err, data) => {
if (err) console.log(err);
console.log(data);
});

最新更新