gpt4 book ai didi

node.js - mongodb 不保存所有数据

转载 作者:可可西里 更新时间:2023-11-01 10:04:48 28 4
gpt4 key购买 nike

我需要在mongodb中插入一些矩阵,所以我写了下面的简单代码

var MongoClient = require('mongodb').MongoClient;    
var matrisMaker = function(d1,d2){
var result = new Array();
for (var i = 0;i < d1;i++){
result.push(new Array());
for (var k = 0;k < d2;k++){
result[i].push(Math.round(Math.random() * 1000000000000));
}
}
return result;
};

MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;

var collection = db.collection('matris');

for (var counter = 0;counter < 10000000;counter++){
var insertObject = {
'matrisA':matrisMaker(20,20),
'matrisB':matrisMaker(20,20),
'resultA':new Object(),
'resultB':new Object()
};
collection.insert(insertObject, function(err, docs) {
if (err)
throw err;
});
delete insertObject;
if ((counter % 1000) == 0)
console.log(counter);
}
db.close();
})

当我看到日志显示插入的记录太多,比如 50,000,但是当我使用 mongodb 计算记录数量时,它显示的更少,接近 1,000 条记录。

>use test;
>db.matris.count();

问题出在哪里?

最佳答案

您的异步代码存在缺陷,您的 db.close() 行在您的异步 insert 命令全部完成之前执行。您需要将程序流控制为 A) 没有一百万个并发数据库插入发生/排队和 B) 等到它们全部被 mongo 处理后再关闭连接。如果您不想自己编写代码,请考虑使用诸如 async.forEach 之类的帮助程序库来帮助解决此问题。

关于node.js - mongodb 不保存所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637274/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com