本文整理汇总了C++中BSONElement::valueStringData方法的典型用法代码示例。如果您正苦于以下问题:C++ BSONElement::valueStringData方法的具体用法?C++ BSONElement::valueStringData怎么用?C++ BSONElement::valueStringData使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BSONElement
的用法示例。
在下文中一共展示了BSONElement::valueStringData方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkTableCreationOptions
// static
Status WiredTigerUtil::checkTableCreationOptions(const BSONElement& configElem) {
invariant(configElem.fieldNameStringData() == "configString");
if (configElem.type() != String) {
return {ErrorCodes::TypeMismatch, "'configString' must be a string."};
}
std::vector<std::string> errors;
ErrorAccumulator eventHandler(&errors);
StringData config = configElem.valueStringData();
// Do NOT allow embedded null characters
if (config.size() != strlen(config.rawData())) {
return {ErrorCodes::FailedToParse, "malformed 'configString' value."};
}
Status status = wtRCToStatus(
wiredtiger_config_validate(nullptr, &eventHandler, "WT_SESSION.create", config.rawData()));
if (!status.isOK()) {
StringBuilder errorMsg;
errorMsg << status.reason();
for (std::string error : errors) {
errorMsg << ". " << error;
}
errorMsg << ".";
return status.withReason(errorMsg.stringData());
}
return Status::OK();
}
示例2: uassert
list<intrusive_ptr<DocumentSource>> DocumentSourceCount::createFromBson(
BSONElement elem, const intrusive_ptr<ExpressionContext>& pExpCtx) {
uassert(40156,
str::stream() << "the count field must be a non-empty string",
elem.type() == String);
StringData elemString = elem.valueStringData();
uassert(
40157, str::stream() << "the count field must be a non-empty string", !elemString.empty());
uassert(40158,
str::stream() << "the count field cannot be a $-prefixed path",
elemString[0] != '$');
uassert(40159,
str::stream() << "the count field cannot contain a null byte",
elemString.find('\0') == string::npos);
uassert(40160,
str::stream() << "the count field cannot contain '.'",
elemString.find('.') == string::npos);
BSONObj groupObj = BSON("$group" << BSON("_id" << BSONNULL << elemString << BSON("$sum" << 1)));
BSONObj projectObj = BSON("$project" << BSON("_id" << 0 << elemString << 1));
auto groupSource = DocumentSourceGroup::createFromBson(groupObj.firstElement(), pExpCtx);
auto projectSource = DocumentSourceProject::createFromBson(projectObj.firstElement(), pExpCtx);
return {groupSource, projectSource};
}
示例3: uassert
vector<intrusive_ptr<DocumentSource>> DocumentSourceSortByCount::createFromBson(
BSONElement elem, const intrusive_ptr<ExpressionContext>& pExpCtx) {
if (elem.type() == Object) {
// Make sure that the sortByCount field is an expression inside an object
BSONObj innerObj = elem.embeddedObject();
uassert(40147,
str::stream() << "the sortByCount field must be defined as a $-prefixed path or an "
"expression inside an object",
innerObj.firstElementFieldName()[0] == '$');
} else if (elem.type() == String) {
// Make sure that the sortByCount field is a $-prefixed path
uassert(40148,
str::stream() << "the sortByCount field must be defined as a $-prefixed path or an "
"expression inside an object",
(elem.valueStringData()[0] == '$'));
} else {
uasserted(
40149,
str::stream() << "the sortByCount field must be specified as a string or as an object");
}
BSONObjBuilder groupExprBuilder;
groupExprBuilder.appendAs(elem, "_id");
groupExprBuilder.append("count", BSON("$sum" << 1));
BSONObj groupObj = BSON("$group" << groupExprBuilder.obj());
BSONObj sortObj = BSON("$sort" << BSON("count" << -1));
auto groupSource = DocumentSourceGroup::createFromBson(groupObj.firstElement(), pExpCtx);
auto sortSource = DocumentSourceSort::createFromBson(sortObj.firstElement(), pExpCtx);
return {groupSource, sortSource};
}
示例4: uassert
std::unique_ptr<DocumentSourceOut::LiteParsed> DocumentSourceOut::LiteParsed::parse(
const AggregationRequest& request, const BSONElement& spec) {
uassert(ErrorCodes::TypeMismatch,
str::stream() << "$out stage requires a string or object argument, but found "
<< typeName(spec.type()),
spec.type() == BSONType::String || spec.type() == BSONType::Object);
NamespaceString targetNss;
bool allowSharded;
WriteModeEnum mode;
if (spec.type() == BSONType::String) {
targetNss = NamespaceString(request.getNamespaceString().db(), spec.valueStringData());
allowSharded = false;
mode = WriteModeEnum::kModeReplaceCollection;
} else if (spec.type() == BSONType::Object) {
auto outSpec =
DocumentSourceOutSpec::parse(IDLParserErrorContext("$out"), spec.embeddedObject());
if (auto targetDb = outSpec.getTargetDb()) {
targetNss = NamespaceString(*targetDb, outSpec.getTargetCollection());
} else {
targetNss =
NamespaceString(request.getNamespaceString().db(), outSpec.getTargetCollection());
}
mode = outSpec.getMode();
// Sharded output collections are not allowed with mode "replaceCollection".
allowSharded = mode != WriteModeEnum::kModeReplaceCollection;
}
uassert(ErrorCodes::InvalidNamespace,
str::stream() << "Invalid $out target namespace, " << targetNss.ns(),
targetNss.isValid());
// All modes require the "insert" action.
ActionSet actions{ActionType::insert};
switch (mode) {
case WriteModeEnum::kModeReplaceCollection:
actions.addAction(ActionType::remove);
break;
case WriteModeEnum::kModeReplaceDocuments:
actions.addAction(ActionType::update);
break;
case WriteModeEnum::kModeInsertDocuments:
// "insertDocuments" mode only requires the "insert" action.
break;
}
if (request.shouldBypassDocumentValidation()) {
actions.addAction(ActionType::bypassDocumentValidation);
}
PrivilegeVector privileges{Privilege(ResourcePattern::forExactNamespace(targetNss), actions)};
return stdx::make_unique<DocumentSourceOut::LiteParsed>(
std::move(targetNss), std::move(privileges), allowSharded);
}
示例5: onCreate
void ShardingConnectionHook::onCreate(DBClientBase* conn) {
// Authenticate as the first thing we do
// NOTE: Replica set authentication allows authentication against *any* online host
if (getGlobalAuthorizationManager()->isAuthEnabled()) {
LOG(2) << "calling onCreate auth for " << conn->toString();
bool result = conn->authenticateInternalUser();
uassert(15847,
str::stream() << "can't authenticate to server " << conn->getServerAddress(),
result);
}
if (_shardedConnections) {
conn->setReplyMetadataReader(_shardingReplyMetadataReader);
}
conn->setRequestMetadataWriter(
[this](BSONObjBuilder* metadataBob, StringData hostStringData) -> Status {
return _shardingRequestMetadataWriter(_shardedConnections, metadataBob, hostStringData);
});
// For every SCC created, add a hook that will allow fastest-config-first config reads if
// the appropriate server options are set.
if (conn->type() == ConnectionString::SYNC) {
SyncClusterConnection* scc = dynamic_cast<SyncClusterConnection*>(conn);
if (scc) {
scc->attachQueryHandler(new SCCFastQueryHandler);
}
} else if (conn->type() == ConnectionString::MASTER) {
BSONObj isMasterResponse;
if (!conn->runCommand("admin", BSON("ismaster" << 1), isMasterResponse)) {
uassertStatusOK(getStatusFromCommandResult(isMasterResponse));
}
long long configServerModeNumber;
Status status =
bsonExtractIntegerField(isMasterResponse, "configsvr", &configServerModeNumber);
if (status == ErrorCodes::NoSuchKey) {
// This isn't a config server we're talking to.
return;
}
uassert(28785,
str::stream() << "Unrecognized configsvr version number: " << configServerModeNumber
<< ". Expected either 0 or 1",
configServerModeNumber == 0 || configServerModeNumber == 1);
BSONElement setName = isMasterResponse["setName"];
status = grid.forwardingCatalogManager()->scheduleReplaceCatalogManagerIfNeeded(
configServerModeNumber == 0 ? CatalogManager::ConfigServerMode::SCCC
: CatalogManager::ConfigServerMode::CSRS,
setName.type() == String ? setName.valueStringData() : StringData(),
static_cast<DBClientConnection*>(conn)->getServerHostAndPort());
uassertStatusOK(status);
}
}
示例6: init
Status ModifierRename::init(const BSONElement& modExpr, const Options& opts, bool* positional) {
if (modExpr.type() != String) {
return Status(ErrorCodes::BadValue,
str::stream() << "The 'to' field for $rename must be a string: " << modExpr);
}
if (modExpr.valueStringData().find('\0') != std::string::npos) {
return Status(ErrorCodes::BadValue,
"The 'to' field for $rename cannot contain an embedded null byte");
}
// Extract the field names from the mod expression
_fromFieldRef.parse(modExpr.fieldName());
Status status = fieldchecker::isUpdatable(_fromFieldRef);
if (!status.isOK())
return status;
_toFieldRef.parse(modExpr.String());
status = fieldchecker::isUpdatable(_toFieldRef);
if (!status.isOK())
return status;
// TODO: Remove this restriction and make a noOp to lift restriction
// Old restriction is that if the fields are the same then it is not allowed.
if (_fromFieldRef == _toFieldRef)
return Status(ErrorCodes::BadValue,
str::stream() << "The source and target field for $rename must differ: "
<< modExpr);
// TODO: Remove this restriction by allowing moving deeping from the 'from' path
// Old restriction is that if the to/from is on the same path it fails
if (_fromFieldRef.isPrefixOf(_toFieldRef) || _toFieldRef.isPrefixOf(_fromFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source and target field for $rename must "
"not be on the same path: "
<< modExpr);
}
// TODO: We can remove this restriction as long as there is only one,
// or it is the same array -- should think on this a bit.
//
// If a $-positional operator was used it is an error
size_t dummyPos;
if (fieldchecker::isPositional(_fromFieldRef, &dummyPos))
return Status(ErrorCodes::BadValue,
str::stream() << "The source field for $rename may not be dynamic: "
<< _fromFieldRef.dottedField());
else if (fieldchecker::isPositional(_toFieldRef, &dummyPos))
return Status(ErrorCodes::BadValue,
str::stream() << "The destination field for $rename may not be dynamic: "
<< _toFieldRef.dottedField());
if (positional)
*positional = false;
return Status::OK();
}
示例7: validateHostImpl
Status ShardingNetworkConnectionHook::validateHostImpl(
const HostAndPort& remoteHost, const executor::RemoteCommandResponse& isMasterReply) {
auto shard = grid.shardRegistry()->getShardNoReload(remoteHost.toString());
if (!shard) {
return {ErrorCodes::ShardNotFound,
str::stream() << "No shard found for host: " << remoteHost.toString()};
}
long long configServerModeNumber;
auto status = bsonExtractIntegerField(isMasterReply.data, "configsvr", &configServerModeNumber);
switch (status.code()) {
case ErrorCodes::OK: {
// The ismaster response indicates remoteHost is a config server.
if (!shard->isConfig()) {
return {ErrorCodes::InvalidOptions,
str::stream() << "Surprised to discover that " << remoteHost.toString()
<< " believes it is a config server"};
}
using ConfigServerMode = CatalogManager::ConfigServerMode;
const BSONElement setName = isMasterReply.data["setName"];
return grid.forwardingCatalogManager()->scheduleReplaceCatalogManagerIfNeeded(
(configServerModeNumber == 0 ? ConfigServerMode::SCCC : ConfigServerMode::CSRS),
(setName.type() == String ? setName.valueStringData() : StringData()),
remoteHost);
}
case ErrorCodes::NoSuchKey: {
// The ismaster response indicates that remoteHost is not a config server, or that
// the config server is running a version prior to the 3.1 development series.
if (!shard->isConfig()) {
return Status::OK();
}
long long remoteMaxWireVersion;
status = bsonExtractIntegerFieldWithDefault(isMasterReply.data,
"maxWireVersion",
RELEASE_2_4_AND_BEFORE,
&remoteMaxWireVersion);
if (!status.isOK()) {
return status;
}
if (remoteMaxWireVersion < FIND_COMMAND) {
// Prior to the introduction of the find command and the 3.1 release series, it was
// not possible to distinguish a config server from a shard server from its ismaster
// response. As such, we must assume that the system is properly configured.
return Status::OK();
}
return {ErrorCodes::InvalidOptions,
str::stream() << "Surprised to discover that " << remoteHost.toString()
<< " does not believe it is a config server"};
}
default:
// The ismaster response was malformed.
return status;
}
}
示例8: parseNsFullyQualified
string Command::parseNsFullyQualified(const string& dbname, const BSONObj& cmdObj) {
BSONElement first = cmdObj.firstElement();
uassert(ErrorCodes::BadValue,
str::stream() << "collection name has invalid type " << typeName(first.type()),
first.canonicalType() == canonicalizeBSONType(mongo::String));
const NamespaceString nss(first.valueStringData());
uassert(ErrorCodes::InvalidNamespace,
str::stream() << "Invalid namespace specified '" << nss.ns() << "'",
nss.isValid());
return nss.ns();
}
示例9: getIdIndexSpec
BSONObj Cloner::getIdIndexSpec(const std::list<BSONObj>& indexSpecs) {
for (auto&& indexSpec : indexSpecs) {
BSONElement indexName;
uassertStatusOK(bsonExtractTypedField(
indexSpec, IndexDescriptor::kIndexNameFieldName, String, &indexName));
if (indexName.valueStringData() == "_id_"_sd) {
return indexSpec;
}
}
return BSONObj();
}
示例10: parseNsCollectionRequired
NamespaceString Command::parseNsCollectionRequired(const string& dbname, const BSONObj& cmdObj) {
// Accepts both BSON String and Symbol for collection name per SERVER-16260
// TODO(kangas) remove Symbol support in MongoDB 3.0 after Ruby driver audit
BSONElement first = cmdObj.firstElement();
uassert(ErrorCodes::BadValue,
str::stream() << "collection name has invalid type " << typeName(first.type()),
first.canonicalType() == canonicalizeBSONType(mongo::String));
const NamespaceString nss(dbname, first.valueStringData());
uassert(ErrorCodes::InvalidNamespace,
str::stream() << "Invalid namespace specified '" << nss.ns() << "'",
nss.isValid());
return nss;
}
示例11: init
Status RenameNode::init(BSONElement modExpr,
const boost::intrusive_ptr<ExpressionContext>& expCtx) {
invariant(modExpr.ok());
invariant(BSONType::String == modExpr.type());
FieldRef fromFieldRef(modExpr.fieldName());
FieldRef toFieldRef(modExpr.String());
if (modExpr.valueStringData().find('\0') != std::string::npos) {
return Status(ErrorCodes::BadValue,
"The 'to' field for $rename cannot contain an embedded null byte");
}
// Parsing {$rename: {'from': 'to'}} places nodes in the UpdateNode tree for both the "from" and
// "to" paths via UpdateObjectNode::parseAndMerge(), which will enforce this isUpdatable
// property.
dassert(fieldchecker::isUpdatable(fromFieldRef).isOK());
dassert(fieldchecker::isUpdatable(toFieldRef).isOK());
// Though we could treat this as a no-op, it is illegal in the current implementation.
if (fromFieldRef == toFieldRef) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source and target field for $rename must differ: "
<< modExpr);
}
if (fromFieldRef.isPrefixOf(toFieldRef) || toFieldRef.isPrefixOf(fromFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source and target field for $rename must "
"not be on the same path: "
<< modExpr);
}
size_t dummyPos;
if (fieldchecker::isPositional(fromFieldRef, &dummyPos) ||
fieldchecker::hasArrayFilter(fromFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The source field for $rename may not be dynamic: "
<< fromFieldRef.dottedField());
} else if (fieldchecker::isPositional(toFieldRef, &dummyPos) ||
fieldchecker::hasArrayFilter(toFieldRef)) {
return Status(ErrorCodes::BadValue,
str::stream() << "The destination field for $rename may not be dynamic: "
<< toFieldRef.dottedField());
}
_val = modExpr;
return Status::OK();
}
示例12: targetNss
std::unique_ptr<LiteParsedDocumentSourceForeignCollections> DocumentSourceOut::liteParse(
const AggregationRequest& request, const BSONElement& spec) {
uassert(ErrorCodes::TypeMismatch,
str::stream() << "$out stage requires a string argument, but found "
<< typeName(spec.type()),
spec.type() == BSONType::String);
NamespaceString targetNss(request.getNamespaceString().db(), spec.valueStringData());
uassert(ErrorCodes::InvalidNamespace,
str::stream() << "Invalid $out target namespace, " << targetNss.ns(),
targetNss.isValid());
ActionSet actions{ActionType::remove, ActionType::insert};
if (request.shouldBypassDocumentValidation()) {
actions.addAction(ActionType::bypassDocumentValidation);
}
PrivilegeVector privileges{Privilege(ResourcePattern::forExactNamespace(targetNss), actions)};
return stdx::make_unique<LiteParsedDocumentSourceForeignCollections>(std::move(targetNss),
std::move(privileges));
}
示例13: checkTableCreationOptions
// static
Status WiredTigerUtil::checkTableCreationOptions(const BSONElement& configElem) {
invariant(configElem.fieldNameStringData() == "configString");
if (configElem.type() != String) {
return {ErrorCodes::TypeMismatch, "'configString' must be a string."};
}
std::vector<std::string> errors;
ErrorAccumulator eventHandler(&errors);
StringData config = configElem.valueStringData();
Status status = wtRCToStatus(
wiredtiger_config_validate(nullptr, &eventHandler, "WT_SESSION.create", config.rawData()));
if (!status.isOK()) {
StringBuilder errorMsg;
errorMsg << status.reason();
for (std::string error : errors) {
errorMsg << ". " << error;
}
errorMsg << ".";
return {status.code(), errorMsg.str()};
}
return Status::OK();
}
示例14: _badValue
Status V2UserDocumentParser::checkValidUserDocument(const BSONObj& doc) const {
BSONElement userElement = doc[AuthorizationManager::USER_NAME_FIELD_NAME];
BSONElement userDBElement = doc[AuthorizationManager::USER_DB_FIELD_NAME];
BSONElement credentialsElement = doc[CREDENTIALS_FIELD_NAME];
BSONElement rolesElement = doc[ROLES_FIELD_NAME];
// Validate the "user" element.
if (userElement.type() != String)
return _badValue("User document needs 'user' field to be a string");
if (userElement.valueStringData().empty())
return _badValue("User document needs 'user' field to be non-empty");
// Validate the "db" element
if (userDBElement.type() != String || userDBElement.valueStringData().empty()) {
return _badValue("User document needs 'db' field to be a non-empty string");
}
StringData userDBStr = userDBElement.valueStringData();
if (!NamespaceString::validDBName(userDBStr, NamespaceString::DollarInDbNameBehavior::Allow) &&
userDBStr != "$external") {
return _badValue(mongoutils::str::stream() << "'" << userDBStr
<< "' is not a valid value for the db field.");
}
// Validate the "credentials" element
if (credentialsElement.eoo()) {
return _badValue("User document needs 'credentials' object");
}
if (credentialsElement.type() != Object) {
return _badValue("User document needs 'credentials' field to be an object");
}
BSONObj credentialsObj = credentialsElement.Obj();
if (credentialsObj.isEmpty()) {
return _badValue("User document needs 'credentials' field to be a non-empty object");
}
if (userDBStr == "$external") {
BSONElement externalElement = credentialsObj[MONGODB_EXTERNAL_CREDENTIAL_FIELD_NAME];
if (externalElement.eoo() || externalElement.type() != Bool || !externalElement.Bool()) {
return _badValue(
"User documents for users defined on '$external' must have "
"'credentials' field set to {external: true}");
}
} else {
const auto validateScram = [&credentialsObj](const auto& fieldName) {
auto scramElement = credentialsObj[fieldName];
if (scramElement.eoo()) {
return Status(ErrorCodes::NoSuchKey,
str::stream() << fieldName << " does not exist");
}
if (scramElement.type() != Object) {
return _badValue(str::stream() << fieldName
<< " credential must be an object, if present");
}
return Status::OK();
};
const auto sha1status = validateScram(SCRAMSHA1_CREDENTIAL_FIELD_NAME);
if (!sha1status.isOK() && (sha1status.code() != ErrorCodes::NoSuchKey)) {
return sha1status;
}
const auto sha256status = validateScram(SCRAMSHA256_CREDENTIAL_FIELD_NAME);
if (!sha256status.isOK() && (sha256status.code() != ErrorCodes::NoSuchKey)) {
return sha256status;
}
if (!sha1status.isOK() && !sha256status.isOK()) {
return _badValue(
"User document must provide credentials for all "
"non-external users");
}
}
// Validate the "roles" element.
Status status = _checkV2RolesArray(rolesElement);
if (!status.isOK())
return status;
// Validate the "authenticationRestrictions" element.
status = initializeAuthenticationRestrictionsFromUserDocument(doc, nullptr);
if (!status.isOK()) {
return status;
}
return Status::OK();
}
示例15: _badValue
Status V2UserDocumentParser::checkValidUserDocument(const BSONObj& doc) const {
BSONElement userElement = doc[AuthorizationManager::USER_NAME_FIELD_NAME];
BSONElement userDBElement = doc[AuthorizationManager::USER_DB_FIELD_NAME];
BSONElement credentialsElement = doc[CREDENTIALS_FIELD_NAME];
BSONElement rolesElement = doc[ROLES_FIELD_NAME];
// Validate the "user" element.
if (userElement.type() != String)
return _badValue("User document needs 'user' field to be a string", 0);
if (userElement.valueStringData().empty())
return _badValue("User document needs 'user' field to be non-empty", 0);
// Validate the "db" element
if (userDBElement.type() != String || userDBElement.valueStringData().empty()) {
return _badValue("User document needs 'db' field to be a non-empty string", 0);
}
StringData userDBStr = userDBElement.valueStringData();
if (!NamespaceString::validDBName(userDBStr) && userDBStr != "$external") {
return _badValue(mongoutils::str::stream() << "'" << userDBStr <<
"' is not a valid value for the db field.",
0);
}
// Validate the "credentials" element
if (credentialsElement.eoo()) {
return _badValue("User document needs 'credentials' object",
0);
}
if (credentialsElement.type() != Object) {
return _badValue("User document needs 'credentials' field to be an object", 0);
}
BSONObj credentialsObj = credentialsElement.Obj();
if (credentialsObj.isEmpty()) {
return _badValue("User document needs 'credentials' field to be a non-empty object",
0);
}
if (userDBStr == "$external") {
BSONElement externalElement = credentialsObj[MONGODB_EXTERNAL_CREDENTIAL_FIELD_NAME];
if (externalElement.eoo() || externalElement.type() != Bool ||
!externalElement.Bool()) {
return _badValue("User documents for users defined on '$external' must have "
"'credentials' field set to {external: true}", 0);
}
}
else {
BSONElement scramElement = credentialsObj[SCRAM_CREDENTIAL_FIELD_NAME];
BSONElement mongoCRElement = credentialsObj[MONGODB_CR_CREDENTIAL_FIELD_NAME];
if (!mongoCRElement.eoo()) {
if (mongoCRElement.type() != String || mongoCRElement.valueStringData().empty()) {
return _badValue("MONGODB-CR credential must to be a non-empty string"
", if present", 0);
}
}
else if (!scramElement.eoo()) {
if (scramElement.type() != Object) {
return _badValue("SCRAM credential must be an object, if present", 0);
}
}
else {
return _badValue("User document must provide credentials for all "
"non-external users", 0);
}
}
// Validate the "roles" element.
Status status = _checkV2RolesArray(rolesElement);
if (!status.isOK())
return status;
return Status::OK();
}