Node.js 限制mongodb插入的数量

Node.js 限制mongodb插入的数量,node.js,mongodb,nosql,Node.js,Mongodb,Nosql,有没有办法使用node.js客户端对通过批量插入mongodb插入的文档数量设置固定限制 我通过批量插入将大量文档插入到一个集合中,该集合在fieldA上具有唯一索引。由于fieldA非唯一性,一些插入将失败,因此我不知道事先将插入多少,但我想限制插入的n,以便这些文档的总数永远不会超过5000个 我所能做的就是运行完整的插入,如果n插入使总数超过5000,我会删除n最后插入的文档,这样总数是5000,但这似乎有点愚蠢 有序大容量插入几乎是正确的,但我不希望它在第一次索引冲突时停止,但如果仍有空

有没有办法使用
node.js
客户端对通过批量插入
mongodb
插入的文档数量设置固定限制

我通过批量插入将大量文档插入到一个集合中,该集合在
fieldA
上具有唯一索引。由于
fieldA
非唯一性,一些插入将失败,因此我不知道事先将插入多少,但我想限制插入的
n
,以便这些文档的总数永远不会超过5000个

我所能做的就是运行完整的插入,如果
n插入
使总数超过5000,我会删除
n
最后插入的文档,这样总数是5000,但这似乎有点愚蠢

有序大容量插入几乎是正确的,但我不希望它在第一次索引冲突时停止,但如果仍有空间(即总数<5000),则继续进行

下面是我试图实现的一个例子:

db.myCol.count({foo: val}, function(err, count) {
    var remaining = 5000 - count;
    if (remaining > 0) {
        var bulk = db.myCol.initializeUnorderedBulkOp();
        toInsert.forEach(function(item) {
            bulk.insert(item);
        });

        // make sure no more than remaining is inserted
        bulk.execute(function(err, result) {
            // currently, I would just insert all and
            // then remove the overflow with another db action
            // if nInserted + count > 5000
        });
    }
});

目前,一旦达到成功插入的限制,就无法告诉
Bulk
API停止插入任何记录。 在客户端执行此操作的一种方法

  • 一次最多为
    n
    (本例中为5000)个文档提供
    Bulk
    API 时间
  • 如果在插入过程中发生任何错误,请批量插入 剩下的
  • 递归地做
  • 您可以进一步添加逻辑以仅处理剩余数量的 如果
    剩余
    ,则记录
修改代码:

var toInsert = [..];  // documents to be inserted.

var max = 5000;  // max records for Bulk insert.

function execBulk(start,end){
    db.myCol.count({foo: 'bar'}, function(err, count) {
    var remaining = total - count;
    if (remaining > 0 && toInsert.length > start) {
        var bulk = db.myCol.initializeUnorderedBulkOp();
        toInsert.slice(start,end).forEach(function(item) {
            bulk.insert(item);
        });
        // insert the records
        bulk.execute(function(err, result) {
            if(err){
              console.log(err);
              // insert next set of at most 5000 records.
              execBulk(end,end+max-1)
            }
            else
            {
                console.log(results);
            }
        });
    }
});
}
调用函数:

execBulk(0,max);

那么,在批量操作完成后,您希望集合中有5000条记录吗?您能发布您尝试过的实现吗?@BatScream我想确保在运行批量插入后,特定类型的文档不超过5000个>5000。我已经更新了这个问题以给出一个例子。