Я хочу обновить "пользовательский" -массив следующего JSON-документа, который сохранен в базе данных MongoDB (язык программирования C++)
{
"_id" : ObjectId("5ac4beacc0e2a512e6377d43"),
"document" : "test",
"user" : [
{
"email" : "[email protected]",
"username" : "Anton Held",
"job" : "",
},
{
"email" : "[email protected]",
"username" : "Benny Bill",
"job" : "IT-Officer",
},
{
"email" : "[email protected]",
"username" : "Conny Cenn",
"job" : "",
},
]
}
Поэтому я использую эту команду, чтобы получить этот конкретный документ:
collection.update_one(document{} << "document" << "test"
<< finalize,
document{} << "$set" << open_document <<
(HOW TO DEAL?!) close_document << finalize);
Я знаю, что можно обновить документ с помощью метода «update_one» (или аналогичных методов, таких как «replace_one», «find_one_and_replace»).
Но я не знаю, как поступить с этими методами, чтобы обновить, например, имя пользователя существующего пользователя с помощью "email" -element = "[email protected]" или как я могу добавить пользователя в существующий массив "user. ".
Помогите, пожалуйста :-)





Хорошо, это работает с этой командой, но я не могу преобразовать ее в C++:
db.getCollection('testcollection').update({"document":"test",
"user.email":"[email protected]"}, {"$set":
{"user.$.username":"New Username"}})
Взгляните на мой последний пример, в котором я пытаюсь выяснить, как обновить этот специальный элемент «username» пользователя с помощью email = «[email protected]»:
collection.update_one(document{} << "document" << "test" << finalize,
document{} << "$set" << open_document <<
(HOW TO DEAL?!) close_document << finalize);
Это не ответ. Используйте кнопку редактировать на вопросе и добавьте его к самому вопросу. Затем удалите этот ответ.
Итак, ваш вопрос сводится к как преобразовать эту команду mongo в код C++:
db.getCollection("testcollection").update(
{"document":"test", "user.email":"[email protected]"},
{"$set": {"user.$.username":"New Username"}}
)
Вот как это может выглядеть. Обратите внимание на узор:
open_document и close_document для вложенных { и }Результат образца:
collection.update_one(
document{} << "document" << "test"
<< "user.email" << "[email protected]"
<< finalize,
document{} << "$set"
<< open_document
<< "user.$.username" << "New Username"
<< close_document << finalize
);
Как сказано в документация, вы можете сделать следующее, чтобы добавить нового пользователя:
db.getCollection("testcollection").update(
{ "document": "test"},
{ "$push": {
"user": {
"username":"A new user in town ;)",
"email": "[email protected]"
"job": "A cool job for a cool user"
}
}
}
)
В mongodbcxx:
Как упоминалось в @rustyx, вы можете просто изменить {}, чтобы открыть / закрыть документ и получить:
collection.update_one(
document{}
<< "document" << "test"
<< finalize,
document{}
<< "$push" << open_document
<< "user" << open_document
<< "username" << "A new user in town ;)"
<< "email" << "[email protected]"
<< "job" << "A cool job for a cool user"
<< close_document
<< close_document
<< finalize
);
Кстати, я бы рекомендовал заменить имя массива «user» на «users», потому что это массив пользователей, а не массив пользователей.
Хорошо, эта команда работает, но я не могу преобразовать ее в C++: db.getCollection ('testcollection'). Update ({"document": "test" , "user.email": "a @ gmail .com "}, {" $ set ": {" user. $. username ":" New Username "}}) Взгляните на мой последний пример: collection.update_one (document {} <<" document "<< << "test" << finalize, document {} << "$ set" << open_document << (КАК СДЕЛАТЬ ?!) close_document << finalize);