按索引和特定限制检索Mongo文档

时间:2015-11-16 15:33:18

标签: java mongodb caching

我有一个超过31,000个文档的集合,我想从我的Java HTTP(我使用服务)调用中为每个调用检索x个文档:

public void sendGet()throws Exception{
        //using find service to get all nodes
        String url = "service url"; // "http:....."
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        // optional default is GET
        con.setRequestMethod("GET");
        con.setRequestProperty("User-Agent", userAgent);
        //200 -OK
        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        IterationForDocuments+=100; // set to 0;
    }

对于每个电话,我想获得文档[1-100],对于下一个电话,我想得到[101-200],依此类推,直到结束。 我的问题是:1 - 在cache中有data-types 100个doc的好方法。 2-我应该在哪里放置索引跟踪服务(mongo)或java类? 这是我使用的mongo查询:

module.exports = function (app, options) {
    var mongoFind = {
        events: mongoFindEvents,

        find: function (req, res) {
            var name = "node"
            var query = {};
            query = req.query;
            var Collection = getCollection(name);
            Collection.find(query).toArray(function(err, docs) {
                res.send(docs);
            });
        }
    };

谢谢!

1 个答案:

答案 0 :(得分:1)

您未在此代码段中显示实际查询MongoDb的方式,但您需要做的是为您要检索的文档集发送查询参数。然后在实际查询MongoDb的代码中,您需要使用limitskip运算符来提取正确的数据。所以你的HTTP请求对象看起来像(以JSON格式):

{
    User-Agent: <user-agent>
    Skip: ### //ie 100, 200, 300, etc
    Limit: ### //Sounds like you always want this to be 100
}

然后在你的查询中(再次,你没有显示实际查询Mongo的代码,所以我只是在Mongo shell中看到它):

db.collection.find(<query>).skip(request.skip).limit(request.limit)