Mon go C ++ Driver: Обновление нескольких разделов вложенного документа BSON приводит к созданию нескольких вложенных документов с одинаковым именем - PullRequest
0 голосов
/ 25 марта 2020

При попытке обновить поле во вложенном документе MongoDB с помощью драйвера MongoCXX 3.1.x запись заканчивается несколькими вложенными документами с одним и тем же именем. Например, поля субдокумента, которые у меня есть, должны выглядеть следующим образом:

    "type" : {
        "r" : "78",
        "cat" : "B",
        "sub" : "Z"
    },

Но в итоге выглядит так:

    "type" : {
        "r" : "78"
    },
    "type" : {
        "cat" : "B"
    },
    "type" : {
        "sub" : "Z"
    },

Я добавляю каждое поле в bsoncxx :: builder :: basi c :: документ систематически со следующим кодом:

std::string sFieldName = it->id + "." + it->name;
doc.append(kvp(bsoncxx::stdx::string_view(sFieldName), bsoncxx::stdx::string_view(fieldData)));

Где it-> id - это тип, а it-> name - это каждый из ключей в поддокументе (r, cat, sub), поэтому конечный результат будет похож на KVP (type.r, 78).

Затем я вызываю update_many следующим образом:

(*GetMongoConnection())[m_sMongoDbName][m_sCollectionName].update_many(UpdateFilter.view(), bsoncxx::builder::basic::make_document(kvp("$set", doc.view())));

Я не уверен, есть ли флаг, который я должен предоставить методу обновления, или мое понимание конструкции поддокумента неверно. Любая помощь будет с благодарностью.

...