插入后MongoDB记录丢失
MongoDB record missing after insertion
我在Linux上使用MongoDB 2.4.5 64位,使用C++API插入1M记录
连接后,我确实打开了写问题
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条记录。
我做错了什么?谢谢你的帮助。
您在循环结束时(紧接着)缺少mongo.insert("insert_test.col1", bulk_data);
——除非RECORDS
小于10000的倍数(您说它是1000000,实际上不是),否则不会插入最后9999次迭代,因为它们仍在bulk_data
中!
换句话说,i
只是循环中最后一次迭代的999999
,因此不会输入if
,也不会插入放入bulk_data
中的最后9999条记录。
此外,bulk_data
插入后需要清除:
if (i % 10000 == 0) {
mongo.insert("insert_test.col1", bulk_data);
bulk_data.clear(); // <-----
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将两个数组中的差异记录在第三个数组中
- 禁止在控制台上记录谷神星
- 创建 Spdlog 异步文件记录器时遇到困难
- fastrtps:如何在发布/订阅级别使用 DDS 历史记录?
- Mongocxx无法使用SSL连接到mongoDB
- 如何将自定义记录器与websocketpp一起使用?
- C++结构到德尔福记录dll调用
- 获取 OID(类型::b_oid)作为 MongoDB C++驱动程序中的字符串
- 如何判断SSL_read是否已经接收并处理了来自单个消息的所有记录
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- 使用 Doxygen 记录枚举类值,而不启用EXTRACT_ALL
- 在C++中隐藏键盘记录器的控制台窗口
- 堆栈上的最大激活记录数
- 记录Doxygen中的命名
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 使用 Mongodb C++ API 将记录插入文档
- 使用C++从MongoDb中检索binData记录
- 插入后MongoDB记录丢失