通过Web服务的MongoDB聚合框架

MongoDB aggregation framework via web services

我有一个构建在专有云平台上的应用程序,可通过Web服务访问MongoDB数据库(托管在MongoHQ)。

由于我无法在专有云平台上加载任何内容,因此无法在平台上运行任何本机MongoDB驱动程序。我被迫使用Web服务。

一切都进行得很顺利,直到需要进行基本的数据汇总/平均值计算。

下面是一个示例文档,该文档基于mongoDB发布的时间序列数据最佳实践。这些数据点是一个小时内收集的性能指标。 (dt =小时,val是分钟/秒格式(m0214表示小时后2分14秒)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  _id: ObjectId("531fb241406eb30d07260d61"),
  dt: 1394586000000,
  inst:"my_instance_key",
  vals: {
    m0014: 78,
    m0214: 94,
    m0614: 63,
    m0814: 94,
    m1014: 78,
    m1214: 78,
    m1414: 109,
    m1614: 250,  
    m1814: 78,
    m2014: 125,
    m2214: 94,
    m2414: 63,
    m2614: 78,
    m2814: 63,
    m3014: 78,
    m3214: 78,
    m3414: 63
  }
}

我想做的是向文档添??加一个汇总的"小时"值,即所有分钟值的平均值。但是,似乎没有办法通过Web服务调用来执行此操作,因为MongoHQ和MongoDBLab的Web服务API中似乎缺少聚合框架。

我想我的问题是这些:

1)有没有办法使用MongoHQ或MongoDBLab发布的Web服务API? (这并不涉及将所有数据点下载到我的应用中,并在那里进行数学运算)。

2)是否有托管的MongoDB托管提供程序允许访问聚合框架,或者提供了一种优雅的方式来实现此目的?

非常感谢您的帮助!


对于为什么使用Service API而不是驱动程序连接,您的解释不是最好的。我们只能假定您使用的是某些旧式语言,例如经典的ASP或其他语言。

如果您使用的是ASP,则可以按照以下说明使用C#驱动程序(或实际上只是.NET驱动程序)。

对于其他任何事情,我想说的是这些服务提供的功能可能不会比基本的CRUD操作多得多。而且您不是在要求别人推荐您吗?因为您已经知道这是"题外话"。

因此,如果您确实与所使用的语言绑定在一起,那么为什么不创建自己的RESTFul API?当然,您可以轻松实现另一种语言,并可以使用本机驱动程序来实现该语言:

使用nodejs和express这样的方法可以作为示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
app.post('/api/db/:varDb/collection/:varCollection/aggregate',
    function(req,res) {

     // Req body has the parsed JSON as the pipeline commands
     // Mongoclient is already open

     var db = mongoclient.db(varDb);

     db.collection(varCollection).aggregate( req.body.pipeline,
         function(err,response) {

         // Send JSON response to client

     });

});

这仅仅是将服务部署在您的旧代码应用程序能够访问它的地方的问题。因此,您的API现在将连接到您的mongo托管提供商,并且您的应用程序将与您的API对话。

这些可能是要构建的最简单的服务类型。继续尝试。