我有一个构建在专有云平台上的应用程序,它通过web服务访问MongoDB数据库(托管在MongoHQ上)。
由于无法在专有云平台上加载任何内容,所以无法在平台上运行任何本机MongoDB驱动程序。我被迫使用Web服务。
一切进展顺利,直到是时候对数据进行基本总结/平均数了。
下面是一个示例文档,基于mongoDB发布的时间序列数据的最佳实践。这些数据点是在一个小时内收集的性能指标。(dt =小时顶部,表示时间为分钟/秒格式(m0214是指一小时过后的2分14秒)
{
_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提供商允许访问聚合框架,或者提供一种优雅的方法来实现这一点?
非常感谢您的帮助!
发布于 2014-03-12 03:12:09
对于为什么使用Service而不是驱动程序连接,您的解释并不是最好的解释。我们只能假设您正在使用一些遗留语言,如经典ASP或其他一些语言。
如果您使用的是ASP,那么使用C#驱动程序 (或者实际上只使用.NET驱动程序)对您来说可能是一种可能,方法是遵循这些指示。
另外,我要说的是,这些服务可能不会提供比基本的CRUD操作更多的服务。你也没有要求人们在上推荐,对吗?因为已经知道是“非主题”了。
因此,如果您确实与您正在使用的语言绑定,那么为什么不创建您自己的 RESTFul API呢?当然,在另一种语言中,您可以轻松地实现它,并将本机驱动程序用于该语言实现:
使用nodejs和express这样的方法可以作为一个例子:
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
});
});这只是将该服务部署到您的遗留代码应用程序能够访问它的某个地方。因此,yourAPI现在将连接到您的mongo托管提供商,您的应用程序将与 API进行通信。
这些可能是构建的最简单的服务类型。去试试吧。
https://stackoverflow.com/questions/22340436
复制相似问题