因此,在我的应用程序启动时,我需要获取该公司拥有的所有产品的列表。这是仅有约60种产品的列表。
我们需要获取整个列表,无论用户购买了什么,因为未购买的商品需要在“目录”视图中显示。
products
集合中的每个文档都有一个hasAccess
数组属性,这是一个用户ID数组。
问题是这些hasAccess
数组有时会长达数千个项目,因此下面的查询开始需要很长时间(最多1秒):
const userID = req.user.id
Product.find({}, (err, _products) => {
if (err) {
res.status(400).json({ error: err })
return
}
res.json(_products)
}
目前,在执行此查询之后,在将数据返回给客户端之前,我在_products
中的每个循环中检查,检查每个product.hasAccess
是否包含用户的ID,然后执行某些操作
有更高效的方法吗?有没有办法简单地返回一个product.hasAccess.includes(userID)
的布尔值,而不是让Mongoose返回整个数组,然后检查自己?
要明确的是,Mongoose操作本身需要很长时间(几百毫秒),而不是我之后的工作。我最初的感觉是,大部分时间都只是解析大量JSON所需的时间。