【发布时间】:2015-09-29 13:22:24
【问题描述】:
我使用 MongoDB C++ 驱动程序(旧版)制作了一个简单的复制器。现在我正在努力加快速度。使用向量插入,插入操作要快得多(批量插入显示与单元素插入大约相同的时间)。 但我不知道删除一堆文档的最佳选择是什么。 我有想要作为 mongo::BSONObj 的向量删除的文档(带有 ObjectId)。
【问题讨论】:
我使用 MongoDB C++ 驱动程序(旧版)制作了一个简单的复制器。现在我正在努力加快速度。使用向量插入,插入操作要快得多(批量插入显示与单元素插入大约相同的时间)。 但我不知道删除一堆文档的最佳选择是什么。 我有想要作为 mongo::BSONObj 的向量删除的文档(带有 ObjectId)。
【问题讨论】:
我查询了 ObjectId 以获取每组文档的单个删除。像这样
{"_id" : {$in : [ObjectId("..."), ...]}}
它显示了更好的性能。这是我在 C++ 中的示例代码
std::vector<mongo::BSONObj> bulk_data;
...
std::stringstream ss;
ss << "{\"_id\" : {$in : [";
for(size_t j = 0; j < bulk_data.size(); ++j)
{
if(j != 0)
ss << ",";
ss << "ObjectId(\"" << bulk_data[j]["_id"].OID() << "\")";
}
ss << "]}}";
conn_src->remove( "test.col1" , ss.str());
【讨论】: