本文整理汇总了C++中MutableDocument::setSortKeyMetaField方法的典型用法代码示例。如果您正苦于以下问题:C++ MutableDocument::setSortKeyMetaField方法的具体用法?C++ MutableDocument::setSortKeyMetaField怎么用?C++ MutableDocument::setSortKeyMetaField使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MutableDocument
的用法示例。
在下文中一共展示了MutableDocument::setSortKeyMetaField方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fromBsonWithMetaData
Document Document::fromBsonWithMetaData(const BSONObj& bson) {
MutableDocument md;
BSONObjIterator it(bson);
while (it.more()) {
BSONElement elem(it.next());
auto fieldName = elem.fieldNameStringData();
if (fieldName[0] == '$') {
if (fieldName == metaFieldTextScore) {
md.setTextScore(elem.Double());
continue;
} else if (fieldName == metaFieldRandVal) {
md.setRandMetaField(elem.Double());
continue;
} else if (fieldName == metaFieldSortKey) {
md.setSortKeyMetaField(elem.Obj());
continue;
}
}
// Note: this will not parse out metadata in embedded documents.
md.addField(fieldName, Value(elem));
}
return md.freeze();
}
示例2: applyTransformation
//.........这里部分代码省略.........
}
documentKey = input[repl::OplogEntry::kObject2FieldName];
break;
}
case repl::OpTypeEnum::kCommand: {
if (!input.getNestedField("o.drop").missing()) {
operationType = DocumentSourceChangeStream::kDropCollectionOpType;
// The "o.drop" field will contain the actual collection name.
nss = NamespaceString(nss.db(), input.getNestedField("o.drop").getString());
} else if (!input.getNestedField("o.renameCollection").missing()) {
operationType = DocumentSourceChangeStream::kRenameCollectionOpType;
// The "o.renameCollection" field contains the namespace of the original collection.
nss = NamespaceString(input.getNestedField("o.renameCollection").getString());
// The "o.to" field contains the target namespace for the rename.
const auto renameTargetNss =
NamespaceString(input.getNestedField("o.to").getString());
doc.addField(DocumentSourceChangeStream::kRenameTargetNssField,
Value(Document{{"db", renameTargetNss.db()},
{"coll", renameTargetNss.coll()}}));
} else if (!input.getNestedField("o.dropDatabase").missing()) {
operationType = DocumentSourceChangeStream::kDropDatabaseOpType;
// Extract the database name from the namespace field and leave the collection name
// empty.
nss = NamespaceString(nss.db());
} else {
// All other commands will invalidate the stream.
operationType = DocumentSourceChangeStream::kInvalidateOpType;
}
// Make sure the result doesn't have a document key.
documentKey = Value();
break;
}
case repl::OpTypeEnum::kNoop: {
operationType = DocumentSourceChangeStream::kNewShardDetectedOpType;
// Generate a fake document Id for NewShardDetected operation so that we can resume
// after this operation.
documentKey = Value(Document{{DocumentSourceChangeStream::kIdField,
input[repl::OplogEntry::kObject2FieldName]}});
break;
}
default: { MONGO_UNREACHABLE; }
}
// UUID should always be present except for invalidate and dropDatabase entries.
if (operationType != DocumentSourceChangeStream::kInvalidateOpType &&
operationType != DocumentSourceChangeStream::kDropDatabaseOpType) {
invariant(!uuid.missing(), "Saw a CRUD op without a UUID");
}
// Note that 'documentKey' and/or 'uuid' might be missing, in which case they will not appear
// in the output.
auto resumeTokenData = getResumeToken(ts, uuid, documentKey);
auto resumeToken = ResumeToken(resumeTokenData).toDocument();
// Add some additional fields only relevant to transactions.
if (_txnContext) {
doc.addField(DocumentSourceChangeStream::kTxnNumberField,
Value(static_cast<long long>(_txnContext->txnNumber)));
doc.addField(DocumentSourceChangeStream::kLsidField, Value(_txnContext->lsid));
}
doc.addField(DocumentSourceChangeStream::kIdField, Value(resumeToken));
doc.addField(DocumentSourceChangeStream::kOperationTypeField, Value(operationType));
doc.addField(DocumentSourceChangeStream::kClusterTimeField, Value(resumeTokenData.clusterTime));
// We set the resume token as the document's sort key in both the sharded and non-sharded cases,
// since we will subsequently rely upon it to generate a correct postBatchResumeToken.
// TODO SERVER-38539: when returning results for merging, we first check whether 'mergeByPBRT'
// has been set. If not, then the request was sent from an older mongoS which cannot merge by
// raw resume tokens, and we must use the old sort key format. This check, and the 'mergeByPBRT'
// flag, are no longer necessary in 4.4; all change streams will be merged by resume token.
if (pExpCtx->needsMerge && !pExpCtx->mergeByPBRT) {
doc.setSortKeyMetaField(BSON("" << ts << "" << uuid << "" << documentKey));
} else {
doc.setSortKeyMetaField(resumeToken.toBson());
}
// "invalidate" and "newShardDetected" entries have fewer fields.
if (operationType == DocumentSourceChangeStream::kInvalidateOpType ||
operationType == DocumentSourceChangeStream::kNewShardDetectedOpType) {
return doc.freeze();
}
doc.addField(DocumentSourceChangeStream::kFullDocumentField, fullDocument);
doc.addField(DocumentSourceChangeStream::kNamespaceField,
operationType == DocumentSourceChangeStream::kDropDatabaseOpType
? Value(Document{{"db", nss.db()}})
: Value(Document{{"db", nss.db()}, {"coll", nss.coll()}}));
doc.addField(DocumentSourceChangeStream::kDocumentKeyField, documentKey);
// Note that 'updateDescription' might be the 'missing' value, in which case it will not be
// serialized.
doc.addField("updateDescription", updateDescription);
return doc.freeze();
}