我试图用我计算出的新值系统地替换JSON对象中的键值:
newReport = filteredReport
sumFunc = (items, prop) => {
return items.reduce( function(a, b){
return a + b[prop];
}, 0);
}
complete = newReport.map((v,i) => {
let newValue = sumFunc(newReport[i].like, 'value')
//return { ...v, like: newValue }
return Object.assign({}, v, {like: newValue})
})
filteredReport,即原始值,是来自MongoDB的查询结果。
运行此函数时,得到的响应长为340,000行。正确的结果位于最后一行,但是在那里我得到了很多其他意外信息。
为什么我会收到此信息?
这是响应的示例:https://codepen.io/schoenbl/pen/pXVRBq?editors=0010#0
编辑: 当我使用spread和Object.assign时,会收到相同的结果。
另一个编辑: 当我在外面预览时,它可以正常工作: https://playcode.io/360520?tabs=script.js,preview,console
最后修改: 这是我的mongo查询:
const report = await Report.find({createdAt: { $gt: startDate, $lt: Date() }})
.populate({path: 'like'})
.populate({
path: 'player',
populate: [{ path: 'team' },
{
path: 'team',
populate: {
path: 'league'
}
}
]
})
答案 0 :(得分:2)
查询时,它返回一个数组Mongoose文档实例。但是,当您使用控制台日志时,它会向您显示其toString
表示形式。但是实际上,它包含Document类实例的所有那些函数属性,以进行进一步的操作。要仅返回数据,请在查询时使用.lean()
。
Report.find().lean().exec(function (err, report) {
....
}
这将仅返回所需数据的普通js对象。并非所有的类属性和方法。
提示:要知道变量真正包含的内容,请使用console.dir
而不是console.log