Hes*_*era 1 mongodb aggregation-framework
假设我有以下 MongoDB 文档。
{
(...)
"services": {
"TCP80": {
"data": [{
"status": 1,
"delay": 3.87,
"ts": 1308056460
},{
"status": 1,
"delay": 2.83,
"ts": 1308058080
},{
"status": 1,
"delay": 5.77,
"ts": 1308060720
}]
}
}}
Run Code Online (Sandbox Code Playgroud)
我希望检索“数据”数组中“ts”值大于“1308056460”的所有条目。因此,预期的结果是,
[
{
"status": 1,
"delay": 2.83,
"ts": 1308058080
},{
"status": 1,
"delay": 5.77,
"ts": 1308060720
}
]
Run Code Online (Sandbox Code Playgroud)
一种方法是使用 MongoDB 聚合函数。
db.test.aggregate(
{$match : {}},
{$unwind: "$services.TCP80.data"},
{$match: {"services.TCP80.data.ts": {$gte: 1308060720}}}
);
Run Code Online (Sandbox Code Playgroud)
另一种方法是将整个数据数组检索到中间层(node.js 应用程序)并运行循环以过滤掉我想要的值。
撇开实现的简单性不谈,哪种方法更有效或产生更快的结果?为什么?
一般来说,MongoDB 聚合函数预计会更快,因为它是用 C 实现的,并且经过高度优化,并且不断开发以使其更快。
话虽如此,即使情况并非如此,正如 Neil 所说,良好的软件工程实践应该优先考虑,除非您正在构建一些关键任务。数据库应该做所有繁重的工作,应该避免不必要的数据传输。代码复杂性和抽象性也应该考虑在内。在这种情况下,由于 MongoDb 确实提供了一个查询来在数据库本身上复制您的逻辑,您应该在数据库服务器本身上执行此操作。
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |