我正在为一个网店构建一个推荐系统,购物历史保存在一个couch-db数据库中,我正在通过map-reduce创建一个视图,为每个用户和产品输出购买该产品的数量,reduce部分包括求和。
// map
const onCheckout = (doc) => {
const { username, items } = doc;
// once a checkout is done (i.e. history db is populated)
// map every items bought
items.map((item) => emit([username, item.name], item.quantity));
};
字符串
然后,我可以获取我的推荐服务并获取视图。
router.get("/recommendation/user", jwt, (req, res) => {
const { username } = req.auth;
history
.view("on-checkout__user", "items_bought", {
group: true,
})
.then((body) => {
console.log(body.rows);
res.status(200).json({ content: body.rows });
})
.catch((err) => res.send(err));
});
型
结果如下:x1c 0d1x
第一个关键字是用户名,然后是产品。值是该产品的用户购买的总数量。但是,我想过滤器,只为特定的用户查看(在头中使用JWT进行请求的请求,例如,仅针对名为“potiron”的用户)。我知道我可以在视图函数的参数中传递一个键,我用{key: "potiron"}
试过了,但是不行。还有别的办法吗?
1条答案
按热度按时间zed5wv101#
你的键不是字符串,而是一个数组。你会想这样做:
startkey=["potiron"]&endkey=["potiron",{}]
参考