При попытке обновить поле во вложенном документе 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())));
Я не уверен, есть ли флаг, который я должен предоставить методу обновления, или мое понимание конструкции поддокумента неверно. Любая помощь будет с благодарностью.