我在Linux上使用MongoDB 2.4.5 64位使用C ++ API插入1 M记录
我确实在连接后打开了写入问题
mongo.setWriteConcern(mongo::W_NORMAL);
for (int i=0; i<RECORDS; i++) {
mongo::BSONObj record = BSON (
"_id" << i <<
"mystring" << "hello world" );
bulk_data.push_back(record);
if (i % 10000 == 0) {
mongo.insert("insert_test.col1", bulk_data);
}
}
令人惊讶的是,当我计算时(通过count(),它只显示来自集合'insert_test.col1'的990001条记录。
我做错了什么?谢谢你的帮助。
答案 0 :(得分:2)
在你的循环结束时(紧接在你的循环之后)你缺少mongo.insert("insert_test.col1", bulk_data);
- 除非RECORDS
小于10000的倍数(你说它是1000000,不是) ,然后没有插入最后的9999次迭代,因为它们仍然在bulk_data
!
换句话说,i
在循环的最后一次迭代中仅为999999
,因此未输入if
,并且放入了最后的9999条记录bulk_data
1}}未插入。
此外,插入后需要清除bulk_data
:
if (i % 10000 == 0) {
mongo.insert("insert_test.col1", bulk_data);
bulk_data.clear(); // <-----
}