猫鼬 mapReduce:ReferenceError:process_1 未定义

时间:2020-12-26 10:38:15

标签: javascript node.js mongodb typescript mongoose

我已经设置了一个小的 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

非常感谢您的帮助!

0 个答案:

没有答案