微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用聚合或使用 nodejs 和 mongoose 手动过滤数据是否更快?

如何解决使用聚合或使用 nodejs 和 mongoose 手动过滤数据是否更快?

我正处于十字路口,试图决定使用哪种方法。基本上,我有一个 mongodb 集合,我想用用户提供的特定参数查询它,然后我想根据其中一些参数的值对响应进行分组。例如,假设我的收藏是动物,如果我查询所有动物,我会得到这样的结果

[
    {type:"Dog",age:3,name:"Kahla"},{type:"Cat",age:6,name:"mimi"},...
]

现在我想向用户返回按动物类型分组的响应,以便我最终得到类似

{
    Dogs: [...dog docs],Cats: [...cat docs],Cows: [...],}

所以基本上我有两种方法可以做到这一点。一种是仅使用 Model.find()获取与我的特定查询(例如年龄或任何其他字段)匹配的所有动物,然后手动过滤和格式化我的 json 响应,然后使用 {{1} 将其发送回用户}(顺便说一句,我用的是快递)

或者我可以使用 mongo 的聚合框架和 res.json({})查询级别执行此操作,因此从数据库返回对我的请求的已分组响应。到目前为止,我发现的唯一不便之处是响应的格式化方式,最终看起来更像这样

$group

总体结果基本相同,但响应的格式有很大不同,我的前端客户端需要调整以适应我发送响应的方式。我不太喜欢聚合中的对象数组,更喜欢类似 json 的对象响应,其中键名与我认为合适的数组对应。

所以这里真正的问题是,一种方式是否比另一种方式具有显着优势?聚合框架是否如此之快,以至于如果我的集合增长到巨大的数量,它会很好地扩展吗?是否使用 javascript 过滤数据并映射响应以便我可以根据自己的喜好调整它的形状,这是一个非常低效的过程,因此最好使用聚合并使前端适应此响应形状?

解决方法

我认为 Faster 是指处理请求的时间最短。也就是说,让我们划分处理您的请求所需的时间:

  • 异步操作(网络操作、文件读/写等)
  • 同步操作

同步操作通常比异步操作快得多。(这也取决于操作的性质和正在处理的数据量)。例如,如果您遍历长度小于 1000 的可迭代对象(例如数组、映射等),则不会超过几毫秒。

另一方面,异步操作需要更多的时间。例如,如果您运行 HTTP 请求,则需要几毫秒才能获得响应。

当你用 mongoose 查询 MongoDB 时,它是一个异步调用,需要更多的时间。因此,如果您对数据库运行更多查询,它会使您的 API 变慢。 MongoDB 聚合可以帮助您减少查询总数,这可能有助于您更快地制作 API。但问题是,聚合通常比普通的 find 请求慢。

总而言之,如果您可以在不添加任何数据库查询的情况下手动过滤数据,速度会更快。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?