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停止插入任何记录。
在客户端执行此操作的一种方法
- 一次最多为
(本例中为5000)个文档提供n
API 时间Bulk
- 如果在插入过程中发生任何错误,请批量插入 剩下的
- 递归地做
- 您可以进一步添加逻辑以仅处理剩余数量的
如果
,则记录剩余
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。我已经更新了这个问题以给出一个例子。