MongoDB + Express ???????
Posted
技术标签:
【中文标题】MongoDB + Express 如何优化代码?【英文标题】:MongoDB + Express How to Optimize the code? 【发布时间】:2020-05-07 13:28:03 【问题描述】:大家好,我有这个糟糕的代码,我该如何优化它?
如果我使用 SQL,我可以在一个查询中使用内部查询...
“用户”它是来自猫鼬的唯一对象
getProfile: async (req, res) =>
const id = req.params;
try
const
image,
name,
gender,
about,
email,
phone,
address
= await User.findById( _id: id ).select('image name gender about email phone address');
const subscriptions = await Subscriber.countDocuments( userId: id );
const subscribers = await Subscriber.countDocuments( subscriberId: id );
const user =
image,
name,
gender,
subscriptions,
subscribers,
about,
email,
phone,
address
;
res.json(user);
catch (err)
console.log(err);
PS。 我只研究这种技术
如果我使用来自用户的查询结果的扩展运算符,我会这样:
这就是我的结果
module.exports =
getProfile: async (req, res) =>
const id = req.params;
try
const [data, subscriptions, subscribers] = await Promise.all([
User.findById( _id: id ,
__v: false,
password: false,
date: false,
_id: false
,
),
Subscriber.countDocuments( userId: id ),
Subscriber.countDocuments( subscriberId: id )
])
const user =
...data._doc,
subscriptions,
subscribers
res.json(user);
catch (err)
console.log(err);
【问题讨论】:
你需要的是mongoose populate 【参考方案1】:您可以在 User 模型中嵌入订阅 [文档数组]。但请记住,如果无论用户如何都可以访问订阅,这可能会对您的 api 施加限制。
【讨论】:
你能给我链接吗?或链接示例.. 关于NoSql DB的书很多,推荐先看看这本:martinfowler.com/books/nosql.html,阅读第2章如何聚合数据并作为一个单元处理. 感谢您的回答)【参考方案2】:由于您的所有查询都是独立的,因此我们能做的最好的事情就是使用 Promise.all() 并行执行所有查询。试试这样的:
getProfile: async (req, res) =>
const id = _id = req.params;
try
const getUser = User.findById( _id ).select('image name gender about email phone address');
const getSubscriptions = Subscriber.countDocuments( userId: id );
const getSubscriber = Subscriber.countDocuments( subscriberId: id );
const [userData, subscriptions, subscribers] = await Promise.all([getUser, getSubscriptions, getSubscriber]);
const user =
...userData,
subscriptions,
subscribers,
;
res.json(user);
catch (err)
console.log(err);
希望这会有所帮助:)
【讨论】:
谢谢,我会努力的... :) 您的解决方案几乎可以帮助我,但是当我使用带有 userData 的扩展运算符时出现了一个问题。我在上面的问题中附上了一张图片 很高兴它有帮助,对于您提到的其他问题,请尝试将 ...userData 更改为 ...userData.toObject() 如果您想知道那里实际发生了什么,看看this以上是关于MongoDB + Express ???????的主要内容,如果未能解决你的问题,请参考以下文章
Node.JS、Express 和 MongoDB :: 多个集合