有没有办法使用以下堆栈获取 mongodb 集合列表的大小(计数):nodejs+express+mongodb+monk
在迷失在承诺的森林之前,我走了这么远。
编辑:在移动stackoverflow上,这是代码。请注意,下面的代码来自回忆,我实际上并没有通过节点运行它,因为我目前是 AF(P)K。
EDIT2:现在实际添加我的代码。
// app.js
// ...
var express = require('express');
// ... some more globals goes here
var mongodb = require('monogdb');
var monk = require('monk');
var api = require('./routes/api');
var db = monk('monogdb://localhost/overland');
var app = express();
// ....
// shove db to every incoming request (as seen here : http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/)
app.user(function(req,res,next){
req.db = db;
next();
});
// ready the route
app.use('/api', api);
// ....and the rest of the usual express-generated code goes here
...这是我的路线/api.js 内容
// routes/api.js
// ...
var express = require('express');
var router = express.Router();
router.get('/qstat', function(req, res){
var db = req.db;
var qnames = req.query.qnames ? req.query.qnames.split(',') : [];
console.log(qnames);
var stats = {};
qnames.forEach(function(qname){
db.get(qname).count({}).then(function(doc){
stats[qname] = doc;
});
});
res.set('Content-Type', 'application/json');
res.send(stats);
});
module.exports = router;
我期待当我这样做时......
curl -G http://localhost:3080/api/qstat?qnames=u3020,u3021,u3033
我会留下这个...
{ 'u3020' : 442, 'u3021' : 143, 'u3033' : 3}
其中每个键是 mongo 集合名称,值是它们的计数。
...相反,我总是留下这个:
{}
我知道这不是我应该如何处理承诺和异步流程的方式。这是一种快速而肮脏的方式,可以从一些用作工作队列的 mongo 集合中收集简单的统计信息。