MongoDB C 查询文档的子元素

MongoDB C++ Query a child element of a document

本文关键字:元素 文档 查询 MongoDB      更新时间:2023-10-16

我与MongoDB的C 驱动程序挣扎了几天...

我想散发特定文档的每个子元素。示例:

Structure JSON-Document:
{
    docID : "123" 
    parts  : 
    {
        part : "a"
        part : "b"
        part : "c"
    }
}
bsoncxx::stdx::optional<bsoncxx::document::value> resultDocument =
            collection.find_one(document{} << "docID" << "123" << finalize);
bsoncxx::document::view viewDocumentResult = resultDocument.value();

现在我想列出所有零件的列表。作为示例输出:

a
b
c

我只能将所有顶级元素作为文档和零件,但不能给出零件的子元素: - (

auto num_keys = 
std::distance(begin(viewDocumentResult), end(viewDocumentResult));
    std::cout << "document has " << num_keys << " keys." << std::endl;

输出:文档有2个键。

std::vector<std::string> doc_keys;
std::transform(begin(viewDocumentResult), end(viewDocumentResult), std::back_inserter(doc_keys), [](bsoncxx::document::element ele) {
    // note that key() returns a string_view
    return ele.key().to_string();
});
std::cout << "document keys are: " << std::endl;
for (auto key : doc_keys) {
    std::cout << key << " " << std::endl;
}

输出:

docID
parts

但是如何输出零件的子元素?

基于您在此处的代码,输出是预期和正确的。您已要求将viewDocumentResult的顶级字段的所有键积累到doc_keys中,然后将其打印出来。所指示的文档中的顶级字段是docIdparts

如果您想要parts子字段的Keynames,请查看该文档并迭代该文档:

auto viewDocumentResultParts = viewDocumentResult['parts'].get_document().view();
std::vector<std::string> doc_keys;
std::transform(begin(viewDocumentResultParts), end(viewDocumentResultParts), std::back_inserter(doc_keys), [](bsoncxx::document::element ele) {
    // note that key() returns a string_view
    return ele.key().to_string();
});
std::cout << "document keys are: " << std::endl;
for (auto key : doc_keys) {
    std::cout << key << " " << std::endl;
}