Beispiel #1
0
RepoBSON RepoBSON::cloneAndShrink() const
{
	std::set<std::string> fields;
	std::unordered_map< std::string, std::pair<std::string, std::vector<uint8_t>>> rawFiles(bigFiles.begin(), bigFiles.end());
	std::string uniqueIDStr = hasField(REPO_LABEL_ID) ? UUIDtoString(getUUIDField(REPO_LABEL_ID)) : UUIDtoString(generateUUID());

	getFieldNames(fields);

	RepoBSON resultBson = *this;
	
	for (const std::string &field : fields)
	{
		if (getField(field).type() == ElementType::BINARY)
		{
			std::string fileName = uniqueIDStr + "_" + field;
			rawFiles[field] = std::pair<std::string, std::vector<uint8_t>>(fileName, std::vector<uint8_t>());
			getBinaryFieldAsVector(field, &rawFiles[field].second);
			resultBson = resultBson.removeField(field);
		}
	}

	return RepoBSON(resultBson, rawFiles);

}