我已经设置了一个小的 api 来创建和读取销售与他们的职位。这些将作为子文档一起存储在 MongoDB 中,如下所示:
{
"_id": [saleId],
"date":"2020-12-23T16:13:29.303Z",
"positions":[{
"_id": [positionId],
"posNr":1,
"articleId": [articleId] ,
"quantity":25,
},
...multiple positions possible...
],
"__v":0
}
存储数据工作正常,但现在我必须读取头寸及其数量才能从我的库存中扣除总量。所以我想得到这样的数据:
{
"articleId": [articleId],
"totalQuantity": 1234
}
我找到了 mongoose mapReduce
方法并构建了这个函数:
export async function getPositionsByArticleId(req: Request, res: Response, next: NextFunction): Promise<void> {
try {
const o = {
map: () => {emit(this.articleId, this.quantity)},
reduce: (articleId, quantity) => {
if(req.params.articleId === articleId) {
return quantity
}
}
}
const sales = await Sales.mapReduce(o)
res.send(sales)
} catch (e) {
res.status(404)
res.send({ error: "Sales not found. " + e })
}
}
函数在mongoose的mapReduce
方法中遇到错误:
MongoError: MapReduce internal error :: caused by :: ReferenceError: process_1 is not defined :\nmap@:2:17\n
在调试这个问题的时候,发现我的emit()
方法中的o.map()
函数是这样执行的:
map() {
process_1.emit(_this.articleId, _this.quantity);
}
我的猫鼬版本是 5.11.4
非常感谢您的帮助!