如何在mongodb中批量获取数据

维格涅什(Vignesh Subramanian)

我想一次从MongoDB检索数据,一次5次

我正在使用限制来限制返回的记录数

router.post('/List', function (req, res) {
    var db = req.db;
    var collection = db.get('clnName');
    collection.find({}, { limit: 5 * req.body.requestCount }, function (e, docs) {
        res.json(docs);
    });
});

在这里,我正在从客户端递增requestCount变量,以便我以5的倍数获取数据。我要实现的是在第一个请求中获取前5个数据,在第二个请求中获取下5个数据,但是发生的是,我得到前5个数据,然后得到前10个数据

我应该做出什么改变才能实现自己的需求?

mongo游标方法中使用批处理大小是否可以解决我的问题?

布雷克七世

显然,这里很明显的情况是.skip()用作修饰符.limit(),以便实现数据的“分页”:

    collection.find({}, { "limit": 5, "skip": 5 * req.body.requestCount  }, function 

但是,如果您只是分批处理,那就更好了,只是过滤掉您已经看到的范围。_id字段为此提供了一个不错的标识符,而无需其他排序。因此,在第一个请求上:

var lastSeen = null;
    collection.find(
        {}, 
        { "limit": 5, "sort": { "_id": 1}  },
        function(err,docs) {
           docs.forEach(function(doc) {
               // do something
               lastSeen = doc._id;        // keep the _id
           });
        }
    );

下一次将“ lastSeen”存储在会话变量(或仅处理批处理的其他循环构造)中之后:

    collection.find(
        { "_id": { "$gt": lastSeen }, 
        { "limit": 5, "sort": { "_id": 1}  },
        function(err,docs) {
           docs.forEach(function(doc) {
               // do something
               lastSeen = doc._id;        // keep the _id
           });
        }
    );

因此,排除所有结果的结果要小于最后_id看到的值。

对于其他排序,这仍然是可能的,但是您需要同时注意最后_id看到的值和最后排序的值。_id自上次值更改以来,也将其视为列表。

    var lastSeenIds = [],
        lastSeenValue = null;    

    collection.find(
        {}, 
        { "limit": 5, "sort": { "other": 1, "_id": 1 }  },
        function(err,docs) {
           docs.forEach(function(doc) {
               // do something
               if ( lastSeenValue != doc.other ) {  // clear on change
                   lastSeenValue = doc.other;
                   lastSeenIds = [];
               }
               lastSeenIds.push(doc._id);     // keep a list
           });
        }
    );

然后在您的下一次迭代中使用变量:

    collection.find(
        { "_id": { "$nin": lastSeenIds }, "other": { "$gte": lastSeenValue } },
        { "limit": 5, "sort": { "other": 1, "_id": 1 }  },
        function(err,docs) {
           docs.forEach(function(doc) {
               // do something
               if ( lastSeenValue != doc.other ) {  // clear on change
                   lastSeenValue = doc.other;
                   lastSeenIds = [];
               }
               lastSeenIds.push(doc._id);     // keep a list
           });
        }
    );

这比“跳过”匹配基本查询条件的结果要有效得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Firebase中获取同步数据?

来自分类Dev

如何在mongoengine中获取ReferenceField数据?

来自分类Dev

如何在Yesod中获取发布数据?

来自分类Dev

如何在XSL文件中获取数据

来自分类Dev

如何在node.js中构造特定查询以从mongodb中获取数据?

来自分类Dev

将数据保存到mongoDB时,如何在代码中获取_id值

来自分类Dev

PyMongo:如何在MongoDB中批量更新巨大的JSON数据

来自分类Dev

如何在MongoDB中按日期分组获取数据百分比

来自分类Dev

如何在MongoDB中获取汇总报告

来自分类Dev

如何在React中获取数据属性?

来自分类Dev

如何在使用中处理获取的数据

来自分类Dev

如何在python中获取csv数据

来自分类Dev

如何在WebAPI中获取POST数据?

来自分类Dev

如何在mongodb中的一系列索引之间获取数据?

来自分类Dev

如何在mongodb更新中设置数据

来自分类Dev

如何在magento中获取运输数据

来自分类Dev

如何在Swift中从NSMutableURLRequest获取数据?

来自分类Dev

如何在Android中从XML获取数据

来自分类Dev

将数据保存到mongoDB时,如何在代码中获取_id值

来自分类Dev

如何在Firebase中获取数据?

来自分类Dev

在mongodb中批量更新数据

来自分类Dev

如何在mongoDB中构造JSON数据?

来自分类Dev

如何在python中获取json的数据

来自分类Dev

如何在mongodb中的文档中获取数组字段中的特定数据?

来自分类Dev

如何在 jQuery 中获取 AJAX 数据?

来自分类Dev

如何在 Codeigniter 中获取会话数据

来自分类Dev

如何从mongodb中获取嵌套数据

来自分类Dev

批量插入数据时如何在Cassandra中给出ttl?

来自分类Dev

如何在 Firebase 中获取孩子的数据

Related 相关文章

热门标签

归档